diff --git a/Cargo.lock b/Cargo.lock index af98577..07972f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1012,17 +1012,17 @@ dependencies = [ [[package]] name = "signal-hook" -version = "0.3.17" +version = "0.4.0" dependencies = [ "cc", "libc", "serial_test 0.7.0", - "signal-hook-registry 1.4.2", + "signal-hook-registry 1.4.3", ] [[package]] name = "signal-hook-async-std" -version = "0.2.2" +version = "0.2.3" dependencies = [ "async-io 1.13.0", "async-std", @@ -1034,7 +1034,7 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.4" +version = "0.2.5" dependencies = [ "libc", "mio 0.6.23", @@ -1057,7 +1057,7 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.3" dependencies = [ "libc", "signal-hook", @@ -1065,7 +1065,7 @@ dependencies = [ [[package]] name = "signal-hook-tokio" -version = "0.3.1" +version = "0.3.2" dependencies = [ "futures", "futures-core", diff --git a/Cargo.toml b/Cargo.toml index 8f191ea..e3e1f3e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "signal-hook" -version = "0.3.17" +version = "0.4.0" authors = [ "Michal 'vorner' Vaner ", "Thomas Himmelstoss ", diff --git a/signal-hook-async-std/Cargo.toml b/signal-hook-async-std/Cargo.toml index d55045a..fa43728 100644 --- a/signal-hook-async-std/Cargo.toml +++ b/signal-hook-async-std/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "signal-hook-async-std" -version = "0.2.2" +version = "0.2.3" authors = [ "Michal 'vorner' Vaner ", "Thomas Himmelstoss ", @@ -23,7 +23,7 @@ maintenance = { status = "actively-developed" } libc = "~0.2" async-io = "~1" futures-lite = "~1" -signal-hook = { version = "~0.3", path = ".." } +signal-hook = { version = "~0.4", path = ".." } [dev-dependencies] async-std = { version = "~1", features = ["attributes"] } diff --git a/signal-hook-mio/Cargo.toml b/signal-hook-mio/Cargo.toml index c797e33..b8bac1b 100644 --- a/signal-hook-mio/Cargo.toml +++ b/signal-hook-mio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "signal-hook-mio" -version = "0.2.4" +version = "0.2.5" authors = [ "Michal 'vorner' Vaner ", "Thomas Himmelstoss ", @@ -27,7 +27,7 @@ support-v1_0 = ["mio-1_0"] [dependencies] libc = "~0.2" -signal-hook = { version = "~0.3", path = ".." } +signal-hook = { version = "~0.4", path = ".." } mio-1_0 = { package = "mio", version = "~1.0", features = ["net", "os-ext"], optional = true } mio-0_8 = { package = "mio", version = "~0.8", features = ["net", "os-ext"], optional = true } mio-0_7 = { package = "mio", version = "~0.7", features = ["os-util", "uds"], optional = true } diff --git a/signal-hook-registry/Cargo.toml b/signal-hook-registry/Cargo.toml index cfa6ff4..455c384 100644 --- a/signal-hook-registry/Cargo.toml +++ b/signal-hook-registry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.3" authors = [ "Michal 'vorner' Vaner ", "Masaki Hara ", @@ -21,4 +21,4 @@ maintenance = { status = "actively-developed" } libc = "~0.2" [dev-dependencies] -signal-hook = { version = "~0.3", path = ".." } +signal-hook = { version = "~0.4", path = ".." } diff --git a/signal-hook-tokio/Cargo.toml b/signal-hook-tokio/Cargo.toml index 5bb2284..9c9e25b 100644 --- a/signal-hook-tokio/Cargo.toml +++ b/signal-hook-tokio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "signal-hook-tokio" -version = "0.3.1" +version = "0.3.2" authors = [ "Michal 'vorner' Vaner ", "Thomas Himmelstoss ", @@ -24,7 +24,7 @@ futures-v0_3 = ["futures-core-0_3"] [dependencies] libc = "~0.2" -signal-hook = { version = "~0.3", path = ".." } +signal-hook = { version = "~0.4", path = ".." } futures-core-0_3 = { package = "futures-core", version = "~0.3", optional = true } tokio = { version = "~1", features = ["net"] } diff --git a/src/low_level/extract.c b/src/low_level/extract.c index 4753e68..f848864 100644 --- a/src/low_level/extract.c +++ b/src/low_level/extract.c @@ -55,3 +55,8 @@ pid_t sighook_signal_pid(const siginfo_t *info) { uid_t sighook_signal_uid(const siginfo_t *info) { return info->si_uid; } + +c_int sighook_signal_status(const siginfo_t *info, bool *has_status) { + *has_status = info->si_signo == SIGCHLD; + return info->si_status; +} diff --git a/src/low_level/siginfo.rs b/src/low_level/siginfo.rs index 9114d7f..e315099 100644 --- a/src/low_level/siginfo.rs +++ b/src/low_level/siginfo.rs @@ -13,6 +13,7 @@ extern "C" { fn sighook_signal_cause(info: &siginfo_t) -> ICause; fn sighook_signal_pid(info: &siginfo_t) -> pid_t; fn sighook_signal_uid(info: &siginfo_t) -> uid_t; + fn sighook_signal_status(info: &siginfo_t, has_status: &mut bool) -> c_int; } // Warning: must be in sync with the C code @@ -66,6 +67,9 @@ pub struct Process { /// The user owning the process. pub uid: uid_t, + + /// The exit status of the process, or the signal number that caused it to change state. + pub status: Option, } impl Process { @@ -78,9 +82,12 @@ impl Process { * and `si_uid` filled in. */ unsafe fn extract(info: &siginfo_t) -> Self { + let mut has_status = false; + let status = sighook_signal_status(info, &mut has_status); Self { pid: sighook_signal_pid(info), uid: sighook_signal_uid(info), + status: has_status.then_some(status), } } }