linux根據程序名殺死程序
筆記:根據一個程序的名字或啟動此程序的命令(連續的一部分即可)殺死程序
一、使用單條命令
ps -ef | grep 程序名/啟動程序的命令 | grep -v grep | awk '{print $2}' | xargs kill -9
測試:
終端輸入:
sleep 200 &
sleep 200 &
ps -ef | grep sleep | grep -v grep | awk '{print $2}' | xargs kill -9
執行結果:
[1]- 已殺死 sleep 200
[2]+ 已殺死 sleep 200
二、編寫指令碼
linux指令碼名:kill_process.sh
#!/bin/bash
# 指令碼名:kill_process.sh
# 指令碼功能:強制殺死程序 方式kill -9
# 1通過ps查詢程序的id
# 2使用kill -9 強制終止程序
# 啟動方式:/bin/bash kill_process.sh 程序名
# 如果引數個數不等於1 提示錯誤並退出程式
if [ $# -ne 1 ]
then
echo "引數個數有誤 請使用此方式執行:/bin/bash kill_process.sh 程序名"
exit 1
fi
# 獲取要被殺死的程序名
pName=$1
<<!
函式功能:根據程序名殺死程式
引數:程序名
返回值:無
!
kill_processes(){
# 獲取程序id
pIds=$(ps -ef | grep "$1" | grep -v grep | grep -v $0 | awk '{print $2}')
for pId in $pIds
do
kill -9 $pId
done
}
echo 將要被終止的程序有:
echo ------------------------------------------------------------------
# 根據程序名查詢包含程序名的程序 並排除grep查詢程序和此指令碼程序
ps -ef | grep "$pName" | grep -v grep | grep -v $0
echo ------------------------------------------------------------------
# 確認是否殺死程式
read -t 10 -p "10秒後將自動殺死這些程序,請確認是否殺死這些程序(y/n):" ipt
case $ipt in
"n")
echo "==我還不想幹掉它們"
exit 0;;
"y")
echo "是的,立即幹掉它們"
kill_processes $pName;;
"")
# 沒有輸入確認資訊 預設殺死程式
echo ""
echo "開始自動殺死這些程式"
kill_processes $pName;;
*)
echo "您的輸入有誤,將終止指令碼"
exit 1;;
esac
測試:
# 終端後臺啟動兩次延時命令
sleep 200 &
sleep 200 &
# 啟動指令碼
/bin/bash kill_process.sh sleep 或 /bin/bash kill_process.sh "sleep 200"
執行結果:
將要被終止的程序有:
------------------------------------------------------------------
python 13583 13550 0 19:42 pts/6 00:00:00 sleep 200
python 13584 13550 0 19:42 pts/6 00:00:00 sleep 200
------------------------------------------------------------------
10秒後將自動殺死這些程序,請確認是否殺死這些程序(y/n):y
是的,立即幹掉它們
[1]- 已殺死 sleep 200
[2]+ 已殺死 sleep 200
如果每次使用命令:"/bin/bash 指令碼路徑 程式"來啟動指令碼會很麻煩
我們可以將這個命令加入到我們的環境變數裡面去 這樣使用起來就會方便很多
比如我們將它加入到當前使用者(也可以修改全域性的對所有使用者生效)的環境變數中:
# 修改當前環境變數的檔案
vi ~/.bash_profile
# 最後一行新增
my_kill="/bin/bash 指令碼路徑"
儲存後執行source ~/.bash_profile使立即生效
之後只要我們在當前使用者下就可以使用命令:"$my_kill 程式"來執行了