python 3.4使用子进程生成进程导致<defunct>

时间:2017-01-24 20:39:17

标签: python linux process centos subprocess

我正在尝试编写一个自动安装程序,这需要在我复制一些文件并更改为可执行文件之后,我从'/etc/init.d/'启动一个文件。 我希望即使在退出脚本本身后,该过程仍继续运行。

使用perl,我在一个较旧的脚本中做了类似的事情:

`/etc/init.d/sradmin start > /dev/null 2>&1`;

这很好用,但我已经转移到Python并且看到了很多关于子进程的内容,所以我尝试过:

p = subprocess.Popen(['/usr/bin/bash', '/etc/init.d/sradmin', 'start'])

并在我的'ps -ef'输出中得到这个:

root      29119  29115  0 20:22 pts/0    00:00:00 [bash] <defunct>

在我的脚本中,它确实显示了“启动XXX”,因此它似乎启动了这个但是失败了。

我也尝试过使用

p = subprocess.Popen(['/etc/init.d/sradmin', 'start'])

p = subprocess.Popen('/etc/init.d/sradmin start', shell=True)

p = subprocess.Popen(['/etc/init.d/sradmin', 'start'], close_fds=True)

我也尝试过stdin,out和error选项。 我也尝试了os.system路线,但是没有用(我知道不推荐,但我认为它可能有用,至少知道别的东西是错的!)。

我正在使用CentOS 7(3.10.0-514.6.1.el7.x86_64 x86_64 GNU / Linux)并使用Python 3.5.2以root身份运行脚本(默认情况下,2016年6月27日,14:02:55)

在此功能出现之前,我是否需要依赖它?似乎很多人的建议对我来说似乎不起作用。

这个让我难过。我只用Python编写了一个多月,通常可以很快找到答案(通过stackoverflow或python docs)。我做了比这更高级的东西,但是,我仍然是Python的新手,所以经验对我不利!

非常感谢,

0 个答案:

没有答案