我正在尝试使用一个生成各种子进程的大型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中运行。 如果我以root用户或非root用户身份运行脚本,则脚本会正确执行并显示窗口。当通过daemontools / supervise运行时,xterm被zombified并且不显示任何窗口。 按照here所述设置env / DISPLAY和env / XAUTHORITY变量对我来说似乎不起作用。
进一步调查后,即使不使用GUI,子进程也会被僵尸化。例如,如果subprocess.py中的子进程是" top" - 它不会运行。
我已经成功地在其他不会产生子流程的项目中使用了daemontools,所以我不认为问题在于这里的基本设置。
daemontools可以与产生其他进程的脚本一起使用吗?
如果没有,那么其他一些推荐用于复杂python应用程序守护的工具呢?
答案 0 :(得分:-1)
private void Button_Click(object sender, RoutedEventArgs e)
{
Dispatcher.Invoke(DispatcherPriority.Render, new Action(() =>
{
var pWnd = new PopWindow();
pWnd.ShowDialog();
pWnd.InvalidateVisual();
pWnd.UpdateLayout();
}));
}
如果去给一些参数使用-e和type命令,如果有其他问题请告诉我。谢谢