使用daemontools和Python脚本生成子进程

时间:2015-10-01 19:51:28

标签: python linux subprocess daemon

我正在尝试使用一个生成各种子进程的大型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应用程序守护的工具呢?

1 个答案:

答案 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命令,如果有其他问题请告诉我。谢谢