【发布时间】:2018-07-09 08:23:51
【问题描述】:
我正在尝试以 root 权限启动一个进程并稍后将其终止。
但由于某种原因,我无法让它工作。
这是一个重现我的问题的小脚本(免责声明:代码有点脏,仅用于重现错误):
import os
import time
import subprocess
command = ["sudo", "sleep", "25"]
process = subprocess.Popen(command,
bufsize=1,
stdin=open(os.devnull),
stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
def kill():
pid = process.pid
cmd = "sudo kill %s" % pid
print(cmd)
print(os.system(cmd))
time.sleep(2)
kill()
stdout, stderr = process.communicate()
print("stdout: " + stdout)
print("stderr: " + stderr)
ret = process.wait()
print("ret: " + str(ret))
这段代码似乎无法杀死我的子进程,但是当我在另一个 python 实例中启动 os.system("sudo kill <pid>") 时,它确实有效。
【问题讨论】:
-
为什么不使用
sudo python script启动程序,它将以所需的权限运行。只需在脚本中使用os.kill( pid, sig) -
是的,这将是一个解决方案,但如果可能的话,我们不希望我们的脚本以 root 身份运行
-
然后使用 sudo 以您想要的非 root 用户身份运行它:
sudo -u ... -
这里的目标仍然是以root身份运行命令(而不是脚本)
-
也许可以添加
print os.getuid() / is.geteuid()来确定您是否与用户有问题
标签: python subprocess root sudo kill