我想从另一个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])
答案 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)
事实证明,这只是一个错误。
解决方案很简单,我将脚本复制到一个新文件中,删除了旧文件,它就这么简单地工作了。