我正在使用子进程启动 snmpd,将对此的引用存储为全局变量,然后想稍后终止该进程。
我像这样开始这个过程:
snmp_proc = subprocess.Popen(['snmpd', '-p', pid_file,'-Lf', log_file],
stdout=open(os.devnull,'w'),stderr=subprocess.STDOUT)
这正确启动但似乎也创建了某种僵尸进程?ps ax 输出给出:
1716 ? Z 0:00 [snmpd] <defunct>
1718 ? S 0:00 snmpd -p /var/run/snmpd.pid -Lf /var/log/snmpd
现在,当我稍后尝试终止该进程时,只会终止已失效的僵尸进程,而另一个进程则保留。知道我做错了什么吗?这是停止 snmpd 的代码:
def stop_snmp():
global snmp_proc
if not snmp_proc:
return
snmp_proc.terminate()
snmp_proc.wait()
snmp_proc = None