按名称杀死所有进程的命令

按名称杀死所有进程的命令

我有许多名为 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

有很多方法可以做到这一点,但让我们重点关注我所知道的主要两种:

使用psxargs

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'

使用psfor

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'

相关内容