2015-08-25 30 views
2

比方說,我運行以下命令:我怎樣才能殺死一個節日演講指揮?

cat /var/log/dmesg | festival --tts 

這可能返回消息[1] 4726,表示與此操作相關的處理ID。當我運行kill 4726killall festivalkillall catkillall aplay時,語音不會停止(或至少在停止之前持續一段時間)。如果我運行上面的命令,我該如何殺死它開始做的事情?

回答

1

Kill向程序發送一個SIGTERM。 SIGTERM告訴程序停止,允許它正常關閉。該程序是未分配內存,關閉連接,刷新到磁盤,刪除臨時文件等。因此,SIGTERM可能不是即時或快速的。

殺死-9,發送一個SIGSTOP或SIGKILL,它只被內核看到。內核將終止該進程。雖然速度更快,但不允許優雅退出。

我不熟悉節日,因此如果您擔心這些命令會分離進程並且想要停止所有的子進程,那麼可以通過將它們全部從bash shell中產生出來,從而強制執行該問題。當你殺死父bash shell時,它會殺死它擁有的所有進程。

bash -c "cat /var/log/dmesg | festival --tts" & 

你會得到bash shell的pid,你可以殺死並清理所有子過程。