Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python代码内部调用upstart作业会导致进程冻结_Python_Subprocess_Multiprocessing_Upstart - Fatal编程技术网

从python代码内部调用upstart作业会导致进程冻结

从python代码内部调用upstart作业会导致进程冻结,python,subprocess,multiprocessing,upstart,Python,Subprocess,Multiprocessing,Upstart,我有一种情况,我想从我的python代码内部开始一项新的工作。要开始的作业本身是用pythonth编写的,在这里不重要 下面是我的upstart作业config/etc/init/test.conf的样子 normal exit 0 respawn respawn limit 5 300 instance $db chdir /home/talha/conn/test/ script exec /usr/bin/python test.py $db end script 我调用pyth

我有一种情况,我想从我的python代码内部开始一项新的工作。要开始的作业本身是用pythonth编写的,在这里不重要

下面是我的upstart作业config/etc/init/test.conf的样子

normal exit 0
respawn
respawn limit 5 300
instance $db

chdir /home/talha/conn/test/
script
   exec /usr/bin/python test.py $db
end script
我调用python代码来启动这个作业,它位于Django项目中,该项目通过Apache中的wsgi_mod运行。由于apache在www数据下运行,我需要使用sudo来启动upstart。我已经授予apache运行start/stop的权限

我的调用python代码如下所示

cmd = "sudo start test db="+ db_name
p = subprocess.Popen(shlex.split(cmd), stderr=subprocess.STDOUT)
现在服务启动了。这是ps aux的输出

实际服务被终止,但启动/停止进程被卡住

4 S root      9063  1  0  80   0 -  4751 poll_s 23:09 ?00:00:00 sudo start 
test db=testdb
4 S root      9267  1  0  80   0 -  4751 poll_s 23:11 ?00:00:00 sudo stop   
test db=testdb

任何想法/帮助都将不胜感激。

您是否尝试过关闭\u fds=True、stdin=DEVNULL、stdout=DEVNULL、stderr=stdout、preexec\u fn=os.setsid并使用rc=call。。我更新了描述,而不是Popen?@J.F.Sebastian。我错过了一个同样被创建的僵尸进程。这可能是因为start已经死了,但是它的父sudo还活着,所以如果sudo没有为启动进程调用waitpid或者以其他方式获得它;它仍然是僵尸。这似乎与冻结无关。你试过用我提供的参数打电话吗?还可以尝试在apache外部调用和/或使用其他用户。使用subprocess.check_调用获取回溯。
cmd = "sudo stop test db="+ db_name
p = subprocess.Popen(shlex.split(cmd), stderr=subprocess.STDOUT)
4 S root      9063  1  0  80   0 -  4751 poll_s 23:09 ?00:00:00 sudo start 
test db=testdb
4 S root      9267  1  0  80   0 -  4751 poll_s 23:11 ?00:00:00 sudo stop   
test db=testdb