笔记:根据一个进程的名字或启动此进程的命令(连续的一部分即可)杀死进程
一、使用单条命令
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;;
"")
# 没有输入确认信息 默认杀死程序
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