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