mirror of
https://github.com/jiangcuo/nix.git
synced 2026-01-21 12:36:52 +00:00
Make signal argument to kill optional
This commit is contained in:
parent
a9f630ed00
commit
45d8beea46
@ -22,6 +22,12 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
([#457](https://github.com/nix-rust/nix/pull/457))
|
||||
|
||||
### Changed
|
||||
- `kill`'s signature, defined in `::nix::sys::signal`, changed, so that the
|
||||
signal parameter has type `T: Into<Option<Signal>>`. `None` as an argument
|
||||
for that parameter will result in a 0 passed to libc's `kill`, while a
|
||||
`Some`-argument will result in the previous behavior for the contained
|
||||
`Signal`.
|
||||
([#445](https://github.com/nix-rust/nix/pull/410))
|
||||
- The minimum supported version of rustc is now 1.7.0.
|
||||
([#444](https://github.com/nix-rust/nix/pull/444))
|
||||
- Implement `Send` for `KEvent`
|
||||
|
||||
@ -387,8 +387,12 @@ pub fn pthread_sigmask(how: SigFlags,
|
||||
Errno::result(res).map(drop)
|
||||
}
|
||||
|
||||
pub fn kill(pid: libc::pid_t, signal: Signal) -> Result<()> {
|
||||
let res = unsafe { libc::kill(pid, signal as libc::c_int) };
|
||||
pub fn kill<T: Into<Option<Signal>>>(pid: libc::pid_t, signal: T) -> Result<()> {
|
||||
let res = unsafe { libc::kill(pid,
|
||||
match signal.into() {
|
||||
Some(s) => s as libc::c_int,
|
||||
None => 0,
|
||||
}) };
|
||||
|
||||
Errno::result(res).map(drop)
|
||||
}
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
mod test_signal;
|
||||
mod test_socket;
|
||||
mod test_sockopt;
|
||||
mod test_termios;
|
||||
|
||||
7
test/sys/test_signal.rs
Normal file
7
test/sys/test_signal.rs
Normal file
@ -0,0 +1,7 @@
|
||||
use nix::unistd::*;
|
||||
use nix::sys::signal::*;
|
||||
|
||||
#[test]
|
||||
fn test_kill_none() {
|
||||
kill(getpid(), None).ok().expect("Should be able to send signal to myself.");
|
||||
}
|
||||
@ -9,7 +9,7 @@ fn test_wait_signal() {
|
||||
match fork() {
|
||||
Ok(Child) => pause().unwrap_or(()),
|
||||
Ok(Parent { child }) => {
|
||||
kill(child, SIGKILL).ok().expect("Error: Kill Failed");
|
||||
kill(child, Some(SIGKILL)).ok().expect("Error: Kill Failed");
|
||||
assert_eq!(waitpid(child, None), Ok(WaitStatus::Signaled(child, SIGKILL, false)));
|
||||
},
|
||||
// panic, fork should never fail unless there is a serious problem with the OS
|
||||
|
||||
Loading…
Reference in New Issue
Block a user