サブプロセスで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