1. 程式人生 > >linux根據程序名殺死程序

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 程式"來執行了