从另一个脚本中杀死一个python脚本-CalledProcessError

时间:2018-09-12 15:49:44

标签: python kill-process

我想从另一个Python脚本中杀死在我的系统上运行的python脚本。

我遵循了这个answer并略微调整了代码,但出现了错误:

Traceback (most recent call last):   File "/home/pi/base.py", line 13, in <module>
    check_call(["pkill", "-9", "-f", script])
    File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
        raise CalledProcessError(retcode, cmd)
  CalledProcessError: Command '['pkill', '-9', '-f', '/home/pi/MotionDetector.py']' returned non-zero exit status 1

代码:

from subprocess import check_call
import sys
import time

script = '/home/pi/MotionDetector.py'
check_call(["pkill", "-9", "-f", script])

2 个答案:

答案 0 :(得分:1)

这意味着pkill呼叫失败。我想到两个可能的原因:

  • 它实际上与任何进程都不匹配。 pkill在这种情况下将不会生成任何输出并返回1。您可以通过尝试运行pgrep而不是pkill来验证这一点,并查看它在stdout上返回了什么(如果匹配则应该是一行或多行带有PID的行)和/还是它也返回非零状态。

  • 确实匹配,但是执行了pkill的用户无法杀死匹配的进程。在这种情况下,pkill应该在stderr上生成输出,类似于:pkill: killing pid 3244 failed: Operation not permitted

pkill(1)手册页中:

EXIT STATUS
...
       1      No processes matched or none of them could be signalled.
...

答案 1 :(得分:0)

事实证明,这只是一个错误。

解决方案很简单,我将脚本复制到一个新文件中,删除了旧文件,它就这么简单地工作了。