假设我运行以下命令:
cat /var/log/dmesg | festival --tts
这可能会返回 message [1] 4726
,指示与此操作关联的进程 ID。当我运行kill 4726
orkillall festival
或killall cat
orkillall aplay
时,语音不会停止(或者,至少在停止之前它会持续很长时间)。如果我运行上面的命令,我怎样才能杀死它开始做的事情?
Kill 向程序发送一个 SIGTERM。SIGTERM 告诉程序停止,让它优雅地关闭。该程序正在取消分配内存、关闭连接、刷新到磁盘、删除临时文件等。因此 SIGTERM 可能不会立即或快速。
Kill -9,发送 SIGSTOP 或 SIGKILL,只有内核才能看到。内核将终止该进程。虽然这样更快,但它不允许优雅的退出。
我对节日不熟悉,所以如果您担心这些命令正在分叉进程并且您想停止所有子进程,您可以通过将它们全部从 bash shell 中生成来暴力解决问题。当您杀死父 bash shell 时,它将杀死它拥有的所有进程。
bash -c "cat /var/log/dmesg | festival --tts" &
您将获得 bash shell 的 pid,您可以杀死并清理所有子进程。