我试图用一个生成各种子进程的大型python程序来设置daemontools,我遇到了子进程不能正确生成的问题。子进程在通过daemontools启动时只是一个僵化的进程。
我提供了一个简单的例子来演示这一点。
/服务/测试/运行:

#!/bin/sh
cd /script_directory/
exec envdir /service/test/env /usr/bin/python3 test_subprocess.py

/script_directory/test_subprocess.py脚本
import subprocess
from time import sleep
subprocess.Popen("xterm")
while True:
    sleep(1)

test_subprocess.py只需启动一个gui终端并保持活动状态,这样我就可以看到它是否仍在top/htop中运行。
如果我以根用户或非根用户的身份运行脚本,脚本将正确执行并显示窗口。当通过daemontools/supervise运行时,xterm将处于僵化状态,并且不会显示任何窗口。
here所述设置env/display和env/xauthority变量似乎对我不起作用。
在进一步的研究中,即使子进程不使用gui,它也会被僵化。例如,如果subprocess.py中的子流程是“top”,则它将不会运行。
我已经成功地将daemontools用于其他各种不产生子进程的项目,因此我认为这里的基本设置没有问题。
daemontools可以与生成其他进程的脚本一起使用吗?
如果不是,那么其他推荐的用于守护复杂python应用程序的工具是什么?

最佳答案

兄弟,我不明白你要做什么。但试试这个程序:

import subprocess
p = subprocess.Popen(
['xterm', '-hold'], stdin=subprocess.PIPE)
p.communicate()

如果要给出一些参数,请使用-e和type命令,如果有其他问题,请告诉我。

08-25 03:31