如何使用给定的部分名称杀死所有进程?

我想杀死所有通过的进程:

ps aux | grep my_pattern

怎么做?

这不起作用:

pkill my_pattern

#1楼

杀死所有与字符串“ myProcessName”匹配的进程:

ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9

来源: http : //www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9

这段代码在做什么?

ps -ef在该用户可见的计算机上生成进程ID的列表。 管道grep过滤掉包含该字符串的行。 grep -v grep说与执行grepping的进程本身不匹配。 管道awk打印说,将默认定界符空白行拆分并过滤到第二列,这是我们的进程ID。 管道xargs启动了一个新进程,以发送所有这些pid kill -9 ,从而全部结束。

上面的代码是坏的,危险的,丑陋的和令人讨厌的,原因有几个。

  1. 如果强制终止的代码正在执行任何数据库操作或以低概率竞争条件进行安全的事务,那么百分之一的几分之一时间,该事务的原子性就会被破坏,从而产生不确定的行为。 杀死-9无需俘虏。 如果您的代码对此敏感,请尝试将xargs kill部分替换为请求正常关闭的传输标志,并且仅当该请求被拒绝时,last-resort才能kill -9

  2. 您有非零可能性会意外终止操作系统或在不相关的进程中导致未定义的行为,从而导致整个系统不稳定,因为ps -ef列出了可能存在的每个可能的进程,并且您无法确定某个奇怪的第三方库共享您的进程名称,或者在读取和执行kill -9之间的时间中,processid已更改为其他名称,现在您意外地终止了一些您不打算使用的随机进程。

但是,如果您以非常独特的名称了解风险并对其进行控制,并且可以接受少量事务丢失或数据偶尔损坏的情况,那么99.9%的时间就可以了。 如果有问题,请重新启动计算机,确保没有任何进程冲突。 正是由于这样的代码才使技术支持脚本成为“ 5级模因”。


#2楼

您可以使用以下命令列出该过程

ps aux | grep -c myProcessName 

如果您需要检查该进程的数量,请运行

ps aux | grep -c myProcessName |grep -v grep 

之后,您可以使用以下命令终止进程

kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }') 

#3楼

听起来不好吗?

 pkill `pidof myprocess`

例:

# kill all java processes
pkill `pidof java`

#4楼

如果您认为pkill -f PATTERN有点太危险,我会写ezkill一个bash脚本,提示您在与要杀死的PATTERN匹配的进程中选择哪个进程。


#5楼

您可以使用以下命令:

ps -ef | grep -i myprocess | awk {'print $2'} | xargs kill -9

要么

ps -aux | grep -i myprocess | awk {'print $2'} | xargs kill -9

这个对我有用。


#6楼

您可以使用以下命令

kill -9 $(ps aux | grep 'process' | grep -v 'grep' | awk '{print $2}')

#7楼

您也可以使用killall -r my_pattern-r进程名称模式解释为扩展的正则表达式。

killall -r my_pattern

#8楼

如果您不想麻烦查找进程ID,请使用regexp按名称杀死进程。 例如,杀死chrome可以解决问题。

killall -r --regexp chrome


#9楼

最好将pgrep -fkillpkill -f一起使用是最好和最安全的, grep ps的输出可能会出错。

与使用ps | grep ps | grep ,您需要通过添加| grep -v过滤掉grep行 | grep -v或使用模式技巧, pgrep不会按设计选择。

而且,如果您的模式出现在psUID / USERSDATE / START或任何其他列中,您将在输出中得到不需要的进程并杀死它们, pgrep + pkill不会受到此缺陷的影响。

我也发现killall -r / -regexp与我的正则表达式不兼容。

pkill -f "^python3 path/to/my_script$"

man pkill


#10楼

找到了对不支持pkill的服务器执行此操作的最佳方法

kill -9 $(ps ax | grep My_pattern| fgrep -v grep | awk '{ print $1 }')

您不必循环。


#11楼

使用pkill -f ,它匹配命令行任何部分的模式

pkill -f my_pattern

#12楼

如果您在选择流程时需要更大的灵活性,请使用

for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do 
  kill -9 $KILLPID;
done

您可以使用grep -e等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值