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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用给定的部分名称杀死所有进程?相关的知识,希望对你有一定的参考价值。

我想杀死我得到的所有进程:

ps aux | grep my_pattern

怎么做?

这不起作用:

pkill my_pattern
答案

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

pkill -f my_pattern
另一答案

听起来不错?

 pkill `pidof myprocess`

例:

# kill all java processes
pkill `pidof java`
另一答案

使用pgrep -fkill最好和最安全,或者只是pkill -fgreping ps的输出可能出错。

与使用ps | grep不同,你需要通过添加| grep -v或使用模式技巧来过滤掉grep线,pgrep不会在设计中选择自己。

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

我也发现killall -r / -regexp不能用我的正则表达式。

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

man pkill

另一答案

为不支持'pkill'的服务器找到了最好的方法

“kill -9 $(ps ax | grep My_pattern | fgrep -v grep | awk'{print $ 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,结束它们。

由于几个原因,上面的代码是坏的,危险的,丑陋的和hackish。

  1. 如果强制结束的代码正在执行具有低概率竞争条件的任何数据库操作或安全事务,则该事务的原子性将被破坏,从而产生未定义的行为。杀死-9不接受囚犯。如果您的代码对此敏感,请尝试使用请求正常关闭的已发送标志替换xargs kill部分,并且仅当该请求被拒绝时,最后使用kill -9
  2. 你不小心结束操作系统或在不相关的进程中导致未定义的行为是非零的,导致整个系统不稳定,因为ps -ef列出了可能存在的每个可能的进程,你不能确定一些奇怪的第三方库共享你的进程名称,或者在读取和执行kill -9之间的时间,processid已经改变为其他东西,现在你不小心结束了一些你不想要的随机进程。

但是,如果你用非常独特的名字了解它们的风险和控制,并且你可以通过一些丢弃的交易或偶尔的数据损坏,那么99.9%的时间你会没事的。如果出现问题,请重新启动计算机,确保没有任何进程冲突。这是因为像这样的代码使技术支持脚本:“你试过重新启动计算机”5级模因。

另一答案

如果您需要更灵活地选择流程使用

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

你可以使用grep -e等

另一答案

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

ps aux | grep -c myProcessName 

如果你需要检查该进程的计数然后运行

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

之后你可以使用杀死进程

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

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

killall -r my_pattern
另一答案

如果你判断pkill -f PATTERN有点太危险,我写了一个bash脚本的ezkill,它提示你选择那些匹配你要杀死的PATTERN的进程。

另一答案

您可以使用以下命令

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

如果您不想在查找进程ID时遇到麻烦,请使用正则表达式按名称终止进程。例如,在代码之后杀死chrome就可以了。

killall -r --regexp chrome

另一答案

您可以使用以下命令:

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

要么

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

这个对我有用。

以上是关于如何使用给定的部分名称杀死所有进程?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中,如何可靠地杀死进程树 [重复]

如何区分具有相同名称的多个进程并杀死所有在 C# 中以我的 USERNAME 运行的进程?

如何在活动的 onSaveInstanceState() 之后杀死所有打开的片段

AIX - 如何使用进程名称而不是 PID 杀死

如何使用应用程序名称而不是进程名称杀死应用程序

杀死所有xiong名称的进程