Я пытаюсь остановить процесс, убив его, но чтобы избежать зомби, я должен убить ppid перед тем, как убить pid, вот мой код для уничтожения pid:
$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');
Есть ли другой способ получить ppid? или убить процесс, не выходя из процесса зомби?
используйте это, это будет работать
$ppid=shell_exec("ps -o ppid= $pid");
$int = (int)$ppid;
var_dump($int);
shell_exec("exec kill -9 $ppid");
usleep(300);
shell_exec("exec kill -9 $pid");
Других решений пока нет …