我正在使用$(document).ready(function() {
$('.top-bar-section li.active:not(.has-form) a:not(.button)').click(function() {
$("li.active ul.sub-menu.dropdown").hide();
});
$('.top-bar-section ul li').hover(function() {
if($("li.active ul.sub-menu.dropdown").css("display", "none")){
$("li.active ul.sub-menu.dropdown").css("display", "block");
}
});
})
启动多个流程。
代码是这样的:
subprocess.Popen
while flag > 0:
flag = check_flag()
c = MyClass(num_process=10)
c.launch()
如果类似以下内容:
MyClass
在大多数情况下,启动的子流程有时会在运行过程中死亡。在某些情况下,它完成了。
但是,如果我在while循环中直接使用MyClass(object)
def __init__(self, num_process):
self.num_process = num_process
def launch(self):
if self.check_something() < 10:
for i in range(self.num_process):
self.launch_subprocess()
def launch_subprocess(self):
subprocess.Popen(["nohup",
"python",
"/home/mypythonfile.py"],
stdout=open('/dev/null', 'w'),
stderr=open('logfile.log', 'w'),
shell=False)
,则该过程会继续并及时完成。
有人能告诉我如何通过上述方式使用子进程来让后台运行进程?
答案 0 :(得分:4)
当主进程正常退出时,nohup
仅停止SIGHUP信号。对于SIGINT或SIGTERM等其他信号,子进程接收与父进程相同的信号,因为它位于同一进程组中。使用Popen的preexec_fn
参数有两种方法。
subprocess.Popen(['nohup', 'python', '/home/mypythonfile.py'],
stdout=open('/dev/null', 'w'),
stderr=open('logfile.log', 'a'),
preexec_fn=os.setpgrp )
更多信息在另一个post中。
def preexec_function():
signal.signal(signal.SIGINT, signal.SIG_IGN)
subprocess.Popen( ... , preexec_fn=preexec_function)