获取 PID

获取 PID

我如何在 bash 中运行命令来杀死除调用的脚本test.pygreppid 本身之外的所有 python 脚本,以防我们使用类似的东西ps -ef |grep

我想我可以使用 pgrep python 之类的东西来忽略 grep 进程,但是如何排除 test.py 脚本?我知道有一个选项可以做grep -v,有没有选项可以做pgrep -v

澄清:除了 grep 进程 - 意味着当我们这样做时,ps -ef |grep test1.py我们还会得到用于带来此结果的 grep pid。我不想杀死它,因为这个过程在显示结果的阶段不再存在。

答案1

您可以使用以下内容:

pkill $(pgrep python | grep -xv $(pgrep test.py))

从内到外的工作,是这样的:

  1. 收集 test.py 的 PIDpgrep test.py
  2. 将该 PID 发送到将grep -xv其从收集的列表中排除的位置(-v-x选项表示匹配整行 (PID)):
  3. pgrep python收集你想要杀死的 python 脚本列表

您可能需要调整 pgrep 才能准确找到您想要的 python 进程,但这就是基本结构。通过从内到外再次工作来调整它以适应您的情况:

  1. 运行pgrep test.py以确保它准确地找到您期望的 PID。查看pgrep -f匹配完整进程名称的选项以更加确定。

  2. 运行pgrep python(或类似)来查找您想要杀死的“python 脚本”。

  3. 把它们放在一起!

答案2

使用pswith的一般提示grep,通常情况下您不希望grep命令行匹配:

ps -ef | grep '[t]est'

test将在命令行中匹配,但test其本身不会出现在grep命令行中。

获取 PID

ps -eo pid,comm | awk 'NF==2 && $2~"\\.py$" && $2!="test.py" { printf "%d ",$1; }'

我刚刚意识到这仅适用于最多 16 个字符的文件名。

相关内容