【问题标题】:Kill the process using its name inside linux (Python)在 linux (Python) 中使用其名称终止进程
【发布时间】:2009-10-22 23:34:50
【问题描述】:

这可行,但它会杀死每个 Python 进程。

pkill python

但是,我做不到:

pkill myscript.py

我也尝试过 killall,但也没有运气。 我必须使用正则表达式吗?

顺便说一句,我想在带有 import os.

的 python 脚本中执行此操作

【问题讨论】:

    标签: python linux unix process


    【解决方案1】:

    您是否从要杀死它的同一脚本启动 Python 子进程?如果是这样,请参阅this question 了解详情。如果没有,您可以使用pkill 的 -f 选项在 Python 进程的参数列表中搜索脚本名称,但您仍然冒着杀死您不打算杀死的东西的风险。请参阅man page 了解更多信息。

    【讨论】:

      【解决方案2】:

      您能否让进程将其pid 写入文件?
      在 Python 中,您会得到这样的 pid:

      import os
      os.getpid()
      

      点名杀人很方便,但正如你所见,有时会产生不良后果。

      【讨论】:

      • 我认为他试图从(常规)命令行中杀死特定的 python 脚本,而不是从 python 中执行某些操作
      • 两者都适用。我想使用 pkill myscript.py ...只是为了学习如何在命令行中进行操作
      • @hasen,如果你有一个 pid 文件,kill 'cat pid' 使用反引号而不是 ' 会更容易
      • 如果他正在编写脚本,并且为它选择一个唯一的名称,那么他可以轻松保证只有一个匹配。
      【解决方案3】:

      您需要查找进程 ID (pid)。您可以使用命令“ps -A | grep NAME”,然后应用“kill -9 PID”。这些命令可以很容易地翻译成 python。

      尝试使用“名称”(如在 pkill 中)可能会产生多个匹配项,从而产生意想不到的结果(至少在上述问题中设置的上下文中)。

      【讨论】:

      • 这和pkill有什么不同?
      • 您不需要使用 pid。您可以使用任何方法来识别您的进程杀手允许您使用的进程。所有 *nix 都在内部使用 pid,但有时人们想杀死所有匹配模式的进程,而不仅仅是特定的 pid。
      • ... 但最终你会得到一个 pid:就像我上面提到的,一个有更多的变化可以通过其他方式杀死意外的进程。去过那里。
      • 您可能需要包含参数数据的 ps 变体之一。例如。 “ps -AFww”、“ps -A x”、“ps ax”等。我一直喜欢“ps aux”或“ps alx”。如果您知道父 pid (PPID)(生成过程),则有“pstree -p $PPID”或“ps -Fww --ppid 4644”。 awk 可以很容易地把 PID 拉出来。例如。杀死`ps -Fww | grep foo | awk '{print $2;}'` 但是这样容易误杀错误的进程...
      【解决方案4】:

      sudo kill -9 `pgrep python`

      这个命令会杀死所有正在运行的python进程

      【讨论】:

      • 这会杀死所有 python 进程,这是 OP 说他们想要避免的。
      【解决方案5】:

      试试这个:

      echo '#!/usr/bin/env python' > myscript
      cat myscript.py >>myscript
      chmod +x myscript
      ./myscript
      

      当然,您必须更改代码才能终止名为“myscript”的进程 在 UNIX 系统上,可执行文件在开头包含几个字节,这些字节告诉操作系统正在使用哪种二进制格式。如果前两个字节是#!,则操作系统假定这实际上是一个可以由另一个程序执行的文本文件,并且操作系统加载另一个程序并将文本文件传递给它。

      在这种情况下,我可能会在第一行写上#!/usr/bin/python,但如果你的python 在/usr/local/bin 中,那么它将无法工作。相反,我利用env 让它在您的正常路径中搜索python。所有 UNIX 系统在 /usr/bin 中都有 env。如需更多信息,您可以输入man env

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-10
        • 2016-01-12
        • 2012-01-21
        • 1970-01-01
        相关资源
        最近更新 更多