diff options
author | jilles <jilles@FreeBSD.org> | 2014-03-08 19:44:34 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2014-03-08 19:44:34 +0000 |
commit | 6139448a8684c288eb32e0763ef20749ab495847 (patch) | |
tree | dbd858bb77071b4170dbaa3bc3218ea399c009c1 /bin/kill | |
parent | 8dfc245ef95431f18412d2103ec22f44917d1805 (diff) | |
download | FreeBSD-src-6139448a8684c288eb32e0763ef20749ab495847.zip FreeBSD-src-6139448a8684c288eb32e0763ef20749ab495847.tar.gz |
sh: Successfully do nothing when killing a terminated job.
If a job has terminated but is still known, silently do nothing when using
the kill builtin with the job specifier. Formerly, the shell called kill()
with the process group ID that might have been reused.
Diffstat (limited to 'bin/kill')
-rw-r--r-- | bin/kill/kill.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/bin/kill/kill.c b/bin/kill/kill.c index 2d41f78..ab1701e 100644 --- a/bin/kill/kill.c +++ b/bin/kill/kill.c @@ -133,9 +133,15 @@ main(int argc, char *argv[]) for (errors = 0; argc; argc--, argv++) { #ifdef SHELL - if (**argv == '%') + if (**argv == '%') { pid = getjobpgrp(*argv); - else + /* + * Silently ignore terminated jobs, like the kernel + * silently ignores zombies. + */ + if (pid == 0) + continue; + } else #endif { pid = strtol(*argv, &ep, 10); |