Я пытаюсь остановить процесс, убивая его, но, чтобы избежать процесса зомби я должен убить за PPID, прежде чем убить ИДП, вот мой код, чтобы убить PID:процесс убийство родителей в PHP
$descriptorspec = array(array("pipe", "r"), array("pipe", "w"), array("pipe", "a"));
$process = proc_open("MyProcessCommand", $descriptorspec, $pipes);
$status = proc_get_status($process);
$pid = $status['pid'];//Get the process id
{..}
$descriptorspec = array(array("pipe", "r"), array("pipe", "w"), array("pipe", "a"));
proc_open("exec kill -9 $pid", $descriptorspec, $pipes); // killing the pid
return new JsonResponse('Process Stopped');
Итак, я попытался это одно, чтобы получить PPID, но это, кажется, не работает хорошо:
$descriptorspec = array(array("pipe", "r"), array("pipe", "w"), array("pipe", "a"));
$process = proc_open("MyProcessCommand", $descriptorspec, $pipes);
$status = proc_get_status($process);
$pid = $status['pid'];//Get the process id
{..}
$descriptorspec = array(array("pipe", "r"), array("pipe", "w"), array("pipe", "a"));
$ppid = proc_open("exec ps -o ppid= $pid", $descriptorspec, $pipes);
proc_open("exec kill -9 $ppid", $descriptorspec, $pipes);
proc_open("exec kill -9 $pid", $descriptorspec, $pipes); // killing the pid
return new JsonResponse('Process Stopped');
Есть ли другой способ получить пипс? или убить процесс, не оставив никакого зомби-процесса?
'proc_open()' запускает оболочку и передает свой первый аргумент к оболочке будет запущен в качестве нового процесса. Оболочка ждет завершения запущенного процесса и выхода. Вы уверены, что если вы убьете процесс, он станет зомби? Это не обычное поведение оболочек, чтобы игнорировать прекращение их детей. – axiac
да, это так, посмотрите на этот результат 'ps axf': ' 8217? S 0:01 \ _/usr/sbin/httpd 8437? Z 0:00 | \ _ [php] 8221? S 0:01 \ _/usr/sbin/httpd 8338? Z 0:00 | \ _ [php] 8290? S 0:01 \ _/usr/sbin/httpd' –
Masseleria