我想杀死所有通过的进程:
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
,从而全部结束。
上面的代码是坏的,危险的,丑陋的和令人讨厌的,原因有几个。
如果强制终止的代码正在执行任何数据库操作或以低概率竞争条件进行安全的事务,那么百分之一的几分之一时间,该事务的原子性就会被破坏,从而产生不确定的行为。 杀死-9无需俘虏。 如果您的代码对此敏感,请尝试将
xargs kill
部分替换为请求正常关闭的传输标志,并且仅当该请求被拒绝时,last-resort才能kill -9
您有非零可能性会意外终止操作系统或在不相关的进程中导致未定义的行为,从而导致整个系统不稳定,因为
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 -f
与kill
或pkill -f
一起使用是最好和最安全的, grep
ps
的输出可能会出错。
与使用ps | grep
ps | grep
,您需要通过添加| grep -v
过滤掉grep行 | grep -v
或使用模式技巧, pgrep
不会按设计选择。
而且,如果您的模式出现在ps
的UID
/ USER
, SDATE
/ 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等。