我有一個從新創建的shell運行的腳本。 操作系統是紅帽企業Linux服務器版本5.4(Tikanga)。 在腳本檢測到某個應用程序(由腳本啓動)掛起的特定時刻,腳本嘗試終止它啓動的所有過程。我以爲,終止當前用戶在當前的shell啓動的所有進程正確的命令是:pkill殺死由父shell中的其他用戶啓動的sshd進程
pkill /?
的問題是,它殺死了在母貝(由init.d中)開始的sshd和膩子控制檯斷開連接顯示錯誤信息。
我在想:
- 怎麼可能在特定的外殼特定用戶終止過程中母貝其它用戶開始了嗎?
- 什麼是正確的命令終止當前正在運行的腳本啓動的所有進程?
我已經找到了一些解決方案,我存儲所有PID和當腳本需要終止他們,我在循環運行以下命令:
[[email protected] ~]# pkill $(ps aux | grep $pid | awk '{print $2}')
不過,我要尋找一個襯裏只是終止當前腳本啓動的所有進程。
我用$(echo $$)替換靜態進程id後試過了,它總是抱怨2個進程無法找到(kill 13925:No such process)。有什麼想法嗎? – aviad 2012-02-13 10:05:31
這是因爲'ps'返回它自己的pid和'tail'的pid。你可以試試'ps opid --ppid = $$ | tail -n +2 | xargs睡眠「並在另一個終端運行'ps ax'。結果是'ps'和'tail'已經退出,但是'xargs'和'sleep'仍在運行。只需使用'ps opid --ppid = $$ | tail -n +2 | xargs kill&>/dev/null'。如果錯誤代碼是問題,您可以追加'; true',因此退出代碼始終爲0. – core1024 2012-02-13 11:35:09