我有许多名为 Gunicorn 的进程在运行
ubuntu 23884 0.0 7.1 190092 71980 ? S Sep10 0:01 gunicorn: worker [ll1]
ubuntu 23885 0.0 6.8 187120 69128 ? S Sep10 0:01 gunicorn: worker [ll1]
ubuntu 23886 0.0 7.1 189800 71712 ? S Sep10 0:01 gunicorn: worker [ll1]
我想通过名称gunicorn杀死所有进程。目前我只能通过这个脚本一次杀死一个进程。
#!/bin/bash
pid=`ps ax | grep gunicorn | awk '{split($0,a," "); print a[1]}' | head -n 1`
echo $pid
kill $pid
echo "killed gunicorn"
答案1
pkill -f gunicorn
echo "killed gunicorn"
这将杀死任何具有该名称的进程gunicorn
并打印killed gunicorn
消息。
答案2
您可以使用kill all命令以及要发送的信号:
killall -<signal> gunicorn
您还可以使用 -v 输出有关其正在执行的操作的更多信息:
killall -v -<signal> gunicorn
或者像您一样使用脚本,您可以执行以下操作:
#!/bin/bash
for pid in `pidof gunicorn`; do
kill -<signal> $pid;
echo "killed gunicorn [$pid]";
done
<信号>:
答案3
有很多方法可以做到这一点,但让我们重点关注我所知道的主要两种:
使用ps
和xargs
和grep
:
ps -ef | grep '<pattern>' | grep -v grep | awk '{print $2}' | xargs -r kill -9
和awk
:
ps -ef | awk '/<pattern>/ && !/awk/ {print $2}' | xargs -r kill -9
这些命令将杀死所有与该命令匹配的进程<pattern>
所以你的脚本将是这样的:
#!/bin/bash
ps -ef | grep 'gunicorn' | grep -v grep | awk '{print $2}' | xargs -r kill -9
[ $? -eq 0 ] && echo 'killed gunicorn'
或者,
#!/bin/bash
ps -ef | awk '/gunicorn/ && !/awk/ {print $2}' | xargs -r kill -9
[ $? -eq 0 ] && echo 'killed gunicorn'
使用ps
和for
for pid in `ps ax | grep '<pattern>' | awk ' { print $1;}'`; do
kill -9 $pid
done
这也将杀死所有与<pattern>
所以你的脚本将是这样的:
#!/bin/bash
for pid in `ps ax | grep 'gunicorn' | awk ' { print $1;}'`; do
kill -9 $pid
done
[ $? -eq 0 ] && echo 'killed gunicorn'