1. 程式人生 > >Shell中用一條命令根據服務名來殺程序

Shell中用一條命令根據服務名來殺程序

 無論是Shell指令碼處理或日常操作中,讓我們根據服務名來殺程序,我們一般通用的做法

1. 先用ps -ef 或 ps aux來根據服務名來找到pid號

2. 然後使用kill -9 PID來殺程序

這樣的殺個程序要兩個步驟,耗時很大,而且有的程序號不只1個,有的時候是很多個,一個個執行手工,分別執行執行兩個命令的話,耗時,耗力,有的時候還很容易出錯。 這裡有個合二為一的方法。

[[email protected] ~#] ps -ef | grep http | grep -v grep | awk '{print $2}' | xargs kill -9
  • ps -ef 或 ps aux 這兩者是最多的來檢視靜態的程序命令
  • grep http    這裡以http為例
  • grep -v grep   將grep自身的程序排除在外,-v引數,除..之外
  • awk '{print $2}'    獲得程序號
  • xargs命令會將前面命令的輸出結果(pid)作為"kill -9"命令的引數,並執行該命令。"kill -9"會強行殺掉指定程序

這裡可以寫成一個小指令碼

[[email protected] ~#] ./kill_process.sh http
[[email protected] ~#] vim kill_process.sh
#!/bin/bash

ps -ef | grep $1 | grep -v grep | awk '{print $2}' | xargs kill -9 

如果需要定時去殺程序的話,比如說只要找到就殺,每10分鐘去找一次,只需要在指令碼修改一下

[[email protected] ~#] ./kill_process.sh http
[[email protected] ~#] vim kill_process.sh
#!/bin/bash

while [ 1 ]
do
    ps -ef | grep $1 | grep -v grep | awk '{print $2}' | xargs kill -9
    sleep 600
done