按名称杀死进程

按名称杀死进程

我正在使用 bash 启动一个 python 程序的多个实例,如下所示:

python example.py -id $i

其中$i是赋予实例的 id。所有进程都在同一用户上启动,想象一下我无法跟踪进程 ID。是否可以仅通过调用它的命令(带有 id)来杀死特定实例?例如,类似的东西pkill 'python example.py -id 2'显然不起作用。

答案1

使用pkill -fx

pkill -fx 'python example.py -id 2'

-f选项使pkill匹配发生在完整的命令行上,而不仅仅是进程名称,并-x强制模式完全匹配完整的命令,而不仅仅是它的任何子字符串(就像grep -x)。您需要-x避免匹配末尾可能有更多数字的命令行,例如20or 203

答案2

kill $(ps -ef | grep '[s]earch-string' | sed -re 's/[[:blank:]]+/\t/g' | cut -f2)

  1. ps -ef:获取带有参数的进程列表
  2. grep:过滤您想要的记录,以[]阻止 grep 找到它自己。
  3. sed -re 's/[[:blank:]]+/\t/g':将空格转换为单个制表符
  4. cut -f2:提取pid字段

注意: ps不是很便携,有一个用于 posix,一个用于 bsd,一个用于 system-v。 Gnu 看起来试图与所有人兼容。

相关内容