Unix 指南/命令/进程管理/Kill
外观
kill 是一个 unix 命令,用于向正在运行的进程发送 unix 信号。默认情况下,它会尝试发送 TERM 信号,该信号会要求进程停止运行,因此得名 kill。
可以使用 kill 命令查看可用的信号
$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 33) SIGRTMIN 34) SIGRTMIN+1 35) SIGRTMIN+2 36) SIGRTMIN+3 37) SIGRTMIN+4 38) SIGRTMIN+5 39) SIGRTMIN+6 40) SIGRTMIN+7 41) SIGRTMIN+8 42) SIGRTMIN+9 43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13 47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX $
您可以向具有特定名称的所有进程发送给定信号,或者只向一个进程发送,指定其 PID。例如,如果您想向进程 23154 发送 SIGHUP 信号
kill -s SIGHUP 23154
如果您想向所有名为 Apache 的进程发送相同的信号
kill -s SIGHUP Apache
您还可以对 pid 进行分组,以上两个命令可以合并为
kill -s SIGHUP 23154 Apache
通过发出信号,您可以更好地控制系统。假设您有一个正在运行的脚本,其 PID 为 12345,该脚本使用了大量的 CPU,您想在做其他事情时将其“暂停”。您可以向您的进程发出 STOP 信号
kill -s STOP 12345
稍后要恢复它,您需要让进程继续工作
kill -s CONT 12345
示例
我们将启动一个简单的进程(sleep)作为后台进程(&)。sleep 进程什么也不做,只是等待给定的秒数(在本例中为 360 秒或 6 分钟)
$ sleep 360 & [1] 7551 $
shell 会将进程的 PID(7551)返回给我们。让它运行一段时间,然后使用 ps 命令检查其状态
$ ps -o fname,pid,stat,etime COMMAND PID STAT ELAPSED bash 7425 Ss 04:47 sleep 7551 S 00:58 ps 7600 R+ 49710-06:27:47 $
现在,我们要求进程暂停工作
$ kill -s STOP 7551
按 Enter 键更新输出缓冲区,shell 会给出确认
$ [1]+ Stopped sleep 360 $
一段时间后,我们的进程仍然处于停止状态
$ ps -o fname,pid,stat,etime COMMAND PID STAT ELAPSED bash 7425 Ss 10:37 sleep 7551 T 06:05 ps 7719 R+ 49710-06:27:47 $
您可以注意到,尽管进程应该在 5 分钟后结束(请记住,我们使用了“sleep 360”),但自启动以来已经过去了 6 分钟。
现在,我们想让进程继续运行
$ kill -s CONT 7551
按 Enter 键更新缓冲区
$ [1]+ Done sleep 360 $
该进程完成了。当您发出 CONT 信号时,进程恢复并检查当前时间,由于已经过去了 360 秒以上,它自行结束了。