shell 程式設計8 獲取 java程式的pid 殺死pid 對應的程序
阿新 • • 發佈:2019-02-09
var=$(ps -ef | grep -v 'grep' | grep 'hello' | awk '{print $2}') # 其中的 grep -v 'grep' 就是獲取指定外的元素, awk 的$0 是所有值,而$ 1,$2 …… 就是他的域 注意使用ps -ef 查出來的第一列是 使用者名稱 第二列是 pid 第三列是 ppid 我們獲得了 pid 後可以來殺死程序 ************** kill相關資訊 ********************* 名稱:kill 使用許可權:所有使用者 使用方式: kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ] 說明:kill 送出一個特定的訊號 (signal) 給行程 id 為 pid 的行程根據該訊號而做特定的動作, 若沒有指定, 預設是送出終止 (TERM) 的訊號 把計 -s (signal) : 其中可用的訊號有 HUP (1), KILL (9), TERM (15), 分別代表著重跑, 砍掉, 結束; 詳細的訊號可以用 kill -l -p : 印出 pid , 並不送出訊號 -l (signal) : 列出所有可用的訊號名稱 範例: 將 pid 為 323 的行程砍掉 (kill) : kill -9 323 將 pid 為 456 的行程重跑 (restart) : kill -HUP 456 -------------------------------------------------------------------------------- *殺死程序最安全的方法是單純使用kill命令,不加修飾符,不帶標誌 首先使用ps -ef命令確定要殺死程序的PID,然後輸入以下命令: # kill -pid 註釋:標準的kill命令通常都能達到目的。終止有問題的程序,並把程序的資源釋放給系統。然而,如果程序啟動了子程序,只殺死父程序,子程序仍在執行,因此仍消耗資源。為了防止這些所謂的“殭屍程序”,應確保在殺死父程序之前,先殺死其所有的子程序。 -------------------------------------------------------------------------------- *確定要殺死程序的PID或PPID # ps -ef | grep httpd -------------------------------------------------------------------------------- *以優雅的方式結束程序 # kill -l PID -l選項告訴kill命令用好像啟動程序的使用者已登出的方式結束程序。當使用該選項時,kill命令也試圖殺死所留下的子程序。但這個命令也不是總能成功--或許仍然需要先手工殺死子程序,然後再殺死父程序。 -------------------------------------------------------------------------------- *TERM訊號 給父程序傳送一個TERM訊號,試圖殺死它和它的子程序。 # kill -TERM PPID -------------------------------------------------------------------------------- *killall命令 killall命令殺死同一程序組內的所有程序。其允許指定要終止的程序的名稱,而非PID。 # killall httpd -------------------------------------------------------------------------------- *停止和重啟程序 有時候只想簡單的停止和重啟程序。如下: # kill -HUP PID 該命令讓Linux和緩的執行程序關閉,然後立即重啟。在配置應用程式的時候,這個命令很方便,在對配置檔案修改後需要重啟程序時就可以執行此命令。 -------------------------------------------------------------------------------- *絕殺 kill -9 PID 同意的 kill -s SIGKILL 這個強大和危險的命令迫使程序在執行時突然終止,程序在結束後不能自我清理。危害是導致系統資源無法正常釋放,一般不推薦使用,除非其他辦法都無效。 當使用此命令時,一定要通過ps -ef確認沒有剩下任何殭屍程序。只能通過終止父程序來消除殭屍程序。如果殭屍程序被init收養,問題就比較嚴重了。殺死init程序意味著關閉系統。 如果系統中有殭屍程序,並且其父程序是init,而且殭屍程序佔用了大量的系統資源,那麼就需要在某個時候重啟機器以清除程序表了。