lar*_*sks 5 python sudo subprocess
在我正在开发的项目中,有一些代码使用以下命令启动长时间运行的进程sudo:
subprocess.Popen(['sudo', '/usr/bin/somecommand', ...])
Run Code Online (Sandbox Code Playgroud)
我想在父母退出时清理这个过程.目前,子init进程在父进程退出时继续运行(当然重新附加).
我不确定这个问题的最佳解决方案.代码仅限于通过sudo运行某些命令,并且授予运行的一揽子权限sudo kill最多也是粗略的.
我没有一个打开管道到我可以关闭的子进程(子进程不是从stdin读取),我无法修改子进程的代码.
在这种情况下是否还有其他可能有效的机制?
首先,我回答这个问题.虽然我认为这不是一件好事,但这正是你所要求的.我会把那个子进程包装成一个可以监听的小程序stdin.那么你可以使用sudo该程序,它将能够在没有的情况下运行该进程sudo,并且pid当你要求它stdin执行时,它将知道它并且拥有杀死进程所需的权限.
但是,这种情况通常意味着sudo没有密码和安全性差.最常见的技术是使用降低程序的权限,而不是提升它们.在这种情况下,您应该创建一个由超级用户启动的运行程序,而不是通过降低权限启动主程序并侦听管道进行通信.当需要运行一个命令时,你的主程序告诉跑步者程序,跑步者程序完成这项工作.当需要终止命令时,再次通过管道将其告知转轮程序.
共同规则是:
这就是许多应用程序所做的事情.我想到的第一个例子是Apache Web服务器(至少在*nix上),它有一个小的顶级程序和preforked工作程序,它们不是以root/wheel/what-else-is-the-superuser-运行的 - 用户名.
| 归档时间: |
|
| 查看次数: |
1399 次 |
| 最近记录: |