kill 和 killall
管理进程并不仅仅是了解哪些进程在运行,还包括改变它们的行为。最常见的管理程序的方法就是结束它。做这项工作的工具是 kill(1)
。尽管名字如此,但它实际上并不结束进程,只是向它们发送信号。最常见的信号是 SIGTERM
,它告诉进程结束正在进行的工作然后终结。还有一些其它可以发送的信号,最常用的三个是 SIGTERM
、 SIGHUP
和 SIGKILL
。
进程收到信号时会做什么呢。大多数程序收到任何信号时会退出(或者试图退出),但有些特殊的信号除外。对于初学者,SIGTERM
信号告诉进程应该结束自己。这给了进程完成重要活动的时间,比如在退出前向磁盘上写信息。相反的,SIGKILL
信号告诉进程立刻结束。这在杀死无响应的进程时很有用,这通常被称作“银弹”("silver bullet")。一些进程(通常是守护进程)会捕获 SIGHUP
信号并在收到这种信号时重新加载配置文件。
为了向进程发送信号,我们首先需要知道它的 PID。你可以使用我们说过的 ps
很容易的得到它。为了向正在运行的进程发送不同的信号,你可以使用信号编号和 -s
作为参数。 -l
参数列出了所有你可以选择的信号和它们的编号。你也可以使用 -s
和它们的名称来发送信号。
译者注:PID 即为进程号。
有时你可能希望结束所有匹配某个进程名的进程。你可以使用 killall(1)
杀死这些进程。只需要向 killall
提供与 kill
相同的参数即可。
最后更新于