LINUX.ORG.RU

Взаимодействие system в php и fork+exec конструкции в исполняемой программе.


0

1

добрый день всем. Столкнулся со странной ситуацией никак не могу понять что не так. Проще всего пояснить на примерах. Есть очень простая, ничего не делающая программа на С++ (цель выполнить, какую-то программу через минуту после завершения).

#include <unistd.h>
int main()  {
      pid_t pid;
      pid=fork();
      if (pid== 0){
          char *args[] = {  "/bin/sleep" , "60" , (char *) 0 };
          execv("/bin/sleep"  , args);
      }
} 

g++ fork.cpp -o a.out

cp a.out /usr/local/bin

Если ее запускать руками в bash все работает прекрасно. Основная программа мгновенно срабатывает и завершается, а sleep весит себе радостно минуту и тоже дохнет. Но если этоту же программу запустить из php

<?php
$cm = "/usr/local/bin/a.out";
system ($cm);
echo "<br>$cm";
?>

От родительского процесса остается зомбарь на минуту, который завершается только вместе со sleep.

root@master-blagoveschensk:~# ps axuww |  grep a.out
root     17849  0.0  0.0      0     0 ?        Z    11:06   0:00 [a.out] <defunct>

Первый раз вижу зомби родительского процесса, тем более при использовании exec. Подскажите что я не так делаю. Мне нужно что бы system ($cm); в php завершился мгновенно, а не ждал еще минуту пока закончится sleep в дочернем процессе программы a.out. Спасибо.

PS. В реальности программа a.out выолняется с сюидным битом.


отправляй в бэкграунд как демоны делают - отцепляй все потоки ввода-вывода - может поможет...

Pinkbyte ★★★★★ ()
Ответ на: комментарий от true_admin

Друзья всем спасибо за советы. Проблему решил. Демонизация помогла.

ibm ()

У ТС C++ головного мозга.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.