Answers:
使用pkill -f
,它与命令行的任何部分的模式匹配
pkill -f my_pattern
pkill
-最常见的错误是假设在任何给定时间每个二进制文件只能存在一个实例。
killall -m my_pattern
。
pgrep
先使用来验证您要杀死的东西。您可以pgrep -l
用来查看进程名称或pgrep -a
查看完整的命令行。它使用与pkill相同的标志。因此,在这种情况下,您可以使用pgrep -fa my_pattern
。
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
使用已发送的标志替换该部分,以请求正常关闭,并且只有在该请求被拒绝的情况下,才能对kill -9
您非偶然地终止操作系统或在不相关的进程中导致未定义的行为的可能性为非零,这会导致整个系统不稳定,因为ps -ef
列出了可能存在的每个可能的进程,并且您无法确定某些奇怪的第三方库是否共享您的进程名称,或者在读取和执行kill -9之间的时间中,processid已更改为其他名称,现在您意外地终止了一些您不打算使用的随机进程。
但是,如果您以非常独特的名称了解风险并对其进行控制,并且可以接受少量事务丢失或数据偶尔损坏的情况,那么99.9%的时间就可以了。如果有问题,请重新启动计算机,确保没有任何进程冲突。正是由于这样的代码才使技术支持脚本成为“ 5级模因”。
ps -ef | grep myProcessName | grep -v grep | awk '{print $2}' | xargs -r kill -9
如果未提供任何参数,则可能希望使xargs不执行命令。
ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
不带引号,我的一个后台进程在第一次运行时就被杀死了。再次运行它杀死了其余的人。
-r
选项似乎在OS X上不存在。
如果您在选择流程时需要更大的灵活性,请使用
for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do
kill -9 $KILLPID;
done
您可以使用grep -e等。
kill -9 `ps ax | awk '[m]y_pattern { print $1 }'`
(只需注意重构;另请参阅我对@synthesizerpatel的回答的评论)。
ps
返回三个进程123、234和345,则kill 123 234 345
可以选择一个rm
或cat
多个文件参数。
grep
for KILLPID in
ps斧| grep'puma'| grep -v'grep'| awk'{print $ 1;}' ; do kill -9 $KILLPID; done
将删除grep
您可以使用以下命令列出该过程
ps aux | grep -c myProcessName
如果您需要检查该进程的数量,请运行
ps aux | grep -c myProcessName |grep -v grep
之后,您可以使用以下命令终止进程
kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }')
找到了对不支持的服务器执行此操作的最佳方法 pkill
kill -9 $(ps ax | grep My_pattern| fgrep -v grep | awk '{ print $1 }')
您不必循环。
这是最好的,最安全的使用pgrep -f
与kill
,或只是pkill -f
,grep
荷兰国际集团ps
的产量可能会出错。
与使用ps | grep
需要通过添加| grep -v
或使用模式技巧来过滤grep行的方法不同,pgrep
只是不会根据设计进行选择。
此外,应你的模式出现在ps
的UID
/ USER
,SDATE
/ START
或任何其他列,你会在输出中获得的无用进程和杀死他们,pgrep
+ pkill
不从这个缺陷受到影响。
我也发现killall -r
/ -regexp
不适用于我的正则表达式。
pkill -f "^python3 path/to/my_script$"
我接受了Eugen Rieck的回答并与之合作。我的代码添加了以下内容:
ps ax
包括grep,所以我排除了它 grep -Eiv 'grep'
我创建了一个文件,命名为,它killserver
在这里:
#!/bin/bash
PROCESS_TO_KILL=bin/node
PROCESS_LIST=`ps ax | grep -Ei ${PROCESS_TO_KILL} | grep -Eiv 'grep' | awk ' { print $1;}'`
KILLED=
for KILLPID in $PROCESS_LIST; do
if [ ! -z $KILLPID ];then
kill -9 $KILLPID
echo "Killed PID ${KILLPID}"
KILLED=yes
fi
done
if [ -z $KILLED ];then
echo "Didn't kill anything"
fi
结果
➜ myapp git:(master) bash killserver
Killed PID 3358
Killed PID 3382
Killed
➜ myapp git:(master) bash killserver
Didn't kill anything
my_pattern
简单的名称的子串,或者它包含任何正则表达式的特殊字符?