我使用的用户可以进行root级别的调用,而无需提供密码。我的用户当前执行的操作如下所示
pr = subprocess.Popen("sudo sleep 100".split())
sleep(5)
pr.kill()
但是这会导致这个错误,因为用户不是root用户,所以它不能杀死根进程
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 1572, in kill
self.send_signal(signal.SIGKILL)
File "/usr/lib/python2.7/subprocess.py", line 1562, in send_signal
os.kill(self.pid, sig)
OSError: [Errno 1] Operation not permitted
所以我试着这样做
pr = subprocess.Popen("sudo sleep 100".split())
sleep(5)
kill_pr = subprocess.Popen("sudo kill {}".format(pr.pid))
但这并不会扼杀有问题的进程。例如,如果
>> subprocess.Popen("sudo sleep 100".split()).pid
5000
但
$ pgrep sleep
5001
因此,从subprocess.Popen("..").pid
返回的pid
似乎比运行我要杀死的命令的进程的实际pid高1
我假设从Popen
调用返回的pid
是父进程,所以我尝试这样做
sudo kill -- -$PID
,其中$PID
是从Popen
返回的那个,但这给了我
kill: sending signal to -2100 failed: No such process
为什么进程不存在?
从本质上讲,我只需要一种方法来使用Python子进程在sudo
中运行命令,然后在需要的时候终止它。我假设我需要用我想要杀死的进程的pid
运行某种类型的sudo kill
命令,或者类似的东西,但是我不能确切地确定如何做到这一点。
https://stackoverflow.com/questions/50618411
复制相似问题