我的腳本cdist-deploy-to和cdist-mass-deploy(從cdist配置管理)以交互方式運行(即由用戶調用)。如何殺死當前shell中的所有子進程?
這些腳本調用了大量的腳本,再次調用一些腳本:
cdist-mass-deploy ...
cdist-deploy-to ...
cdist-explorer-run-global ...
cdist-dir ....
我想是退出/殺死所有的腳本,只要cdist質量部署或者通過控件C停止(SIGINT)或者用SIGTERM殺死。
cdist-deploy-to也可以交互方式調用,並且應該表現出相同的行爲。
使用ps -ef ...和co變體找出所有與ppid相似的進程看起來可能相當不可移植。使用$!在深層次上不起作用,所以孩子們沒有後臺進程。
我用下面的代碼嘗試:
__cdist_kill_on_interrupt()
{
__cdist_tmp_removal
kill 0
exit 1
}
trap __cdist_kill_on_interrupt INT TERM
但是這會導致難看的終止信息,以及在炮彈段錯誤(破折號,bash和zsh中),似乎沒有立即反正停止一切:
# cdist-mass-deploy -p ikq04.ethz.ch ikq05.ethz.ch
core: Waiting for cdist-deploy-to jobs to finish
^CTerminated
Terminated
Terminated
Terminated
Segmentation fault
所以,問題是,如何完全退出,包括便攜式的方式(Bourne shell中,沒有CSH支持所需的)所有(子)的孩子嗎?
+1。但我有點擔心討論殺嬰問題。 – Hyperboreus 2011-06-16 23:05:03