2016-02-23 2 views
1

Я пытаюсь остановить процесс, убивая его, но, чтобы избежать процесса зомби я должен убить за 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'); 

Есть ли другой способ получить пипс? или убить процесс, не оставив никакого зомби-процесса?

+0

'proc_open()' запускает оболочку и передает свой первый аргумент к оболочке будет запущен в качестве нового процесса. Оболочка ждет завершения запущенного процесса и выхода. Вы уверены, что если вы убьете процесс, он станет зомби? Это не обычное поведение оболочек, чтобы игнорировать прекращение их детей. – axiac

+0

да, это так, посмотрите на этот результат '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

ответ

1

использование этого, он будет работать

$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"); 
+0

Спасибо, это хорошо работает: D! – Masseleria

Смежные вопросы