2012-07-26 54 views
13

這就是我現在所擁有的在bash腳本:bash腳本,殺進程由PID文件拉動

ps aux | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9 

這樣做的問題是,如果有人登錄並拉動相關的東西的GlassFish ,它也將拉動該PID。從而導致殺死錯誤的PID。

所以我的問題是如何解決我只需要拉正確的PID,以及如何重寫它以從glassfish生成的PID文件中提取PID。

+11

kill -9有點苛刻,你確定你需要這種暴力嗎? :-) – 2012-07-26 15:29:03

回答

17

編輯啓動glassfish的腳本,並在啓動進程的行之後立即放置類似echo $$ > /path/to/PID-file(主目錄可包含~或其他某種機制,如$USER以使用戶特定)的腳本。然後您可以使用kill $(cat /path/to/PID-file)殺死正確的進程。

+0

順便說一句ps a(刪除「只有你自己」),不在代碼中。我錯誤地從舊代碼粘貼了這個。 – 2012-07-26 15:47:48

+4

UUOC for bash。 '$(<文件)' – jordanm 2012-07-26 16:03:32

+4

@jordanm在這裏使用貓的性能影響幾乎不可測量,更不用說對用戶顯而易見了。我會採取更好的可讀性*任何*一天。如果它讓你感覺更好,你可以用'less'替換它,但是'$( Thor84no 2012-07-26 16:14:21

0
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.