這就是我現在所擁有的在bash腳本:bash腳本,殺進程由PID文件拉動
ps aux | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9
這樣做的問題是,如果有人登錄並拉動相關的東西的GlassFish ,它也將拉動該PID。從而導致殺死錯誤的PID。
所以我的問題是如何解決我只需要拉正確的PID,以及如何重寫它以從glassfish生成的PID文件中提取PID。
這就是我現在所擁有的在bash腳本:bash腳本,殺進程由PID文件拉動
ps aux | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9
這樣做的問題是,如果有人登錄並拉動相關的東西的GlassFish ,它也將拉動該PID。從而導致殺死錯誤的PID。
所以我的問題是如何解決我只需要拉正確的PID,以及如何重寫它以從glassfish生成的PID文件中提取PID。
編輯啓動glassfish的腳本,並在啓動進程的行之後立即放置類似echo $$ > /path/to/PID-file
(主目錄可包含~
或其他某種機制,如$USER
以使用戶特定)的腳本。然後您可以使用kill $(cat /path/to/PID-file)
殺死正確的進程。
ps aux | grep ^$USER | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9
下面我錯了ps
開關,所以上面的grep應該沒問題。
啊它不工作,
ps
可能是這樣
ps -ao pid,tty,comm -u $USER
使用,超過這個grep的應該是罰款...
someone else is logged in ...
如果是這樣,添加開關-u
ps aux -u $USER | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9
$ USER是將被選擇和列出的用戶名,默認情況下應該是已經在OS環境中設置。多個用戶可以通過逗號
ps aux -u root,$USER
選擇
拿一張紙條:如果系統中沒有特定的用戶名,PS將拋出
錯誤:用戶名不存在。
閱讀
man ps
瞭解更多信息。
-u userlist Select by effective user ID (EUID) or name. This selects the processes whose effective user name or ID is in userlist. The effective user ID describes the user whose file access permissions are used by the process (see geteuid(2)). Identical to U and --user.
kill -9有點苛刻,你確定你需要這種暴力嗎? :-) – 2012-07-26 15:29:03