1. 程式人生 > >shell 程式設計8 獲取 java程式的pid 殺死pid 對應的程序

shell 程式設計8 獲取 java程式的pid 殺死pid 對應的程序

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,而且殭屍程序佔用了大量的系統資源,那麼就需要在某個時候重啟機器以清除程序表了。