Проблемма вот в чем :
нужно что бы демон во время своей работы
запускал другое приложение, ждал когда оно отработает. Но если просто написать system("...");
то ничего не запускается ... говорят что нужно порождать fork'oм дочерний процесс и тот уже в свою очередь ..? немогли бы мне обьяснить зачем это надо ? и как правильно это сделать.
спасибо.
system сам делает fork,exec и ждет
Скорее всего ошибка в аргументе
Незнаю, как system, но могу рассказать, как делать через exec.
Итак представим такую схему:A1(fork) -> A1 (wait или waitpid)->A1 ...
|-------> A2 -> exec(...)->exit().Пояснение:
Процесс A1 порождает процесс A2, который вызывает exec. При вызове тело процесса A2 заменяется телом программы, вызванной в exec (потому и делается fork). В это время процесс A1 уходит в режим ожидания завершения потомка A2 (wait) или делает что-то, периодически проверяя, завершился потомок A2 или нет (waitpid). Когда потомок завершается , в памяти остается только процесс A1.
wait и waitpid нужны для того, чтобы у тебя zombie-процессов не висело.
Кстати, маленькая хитрость - для вызова заранее неизвестной программы, да еще и с параметрами, делается вызов, например, /bin/sh, которому в качестве параметров передается строка с программой и ее параметрами.Вобщем, получается что-то типа:
...
char program_name[1024];
bzero(&program_name,1024);
fgets(&program_name,1023,stdin);
int pid=fork();
if (pid > 0) {
// родитель
wait(pid);
} else if (pid == 0) {
// потомок
exec("/bin/sh","-c",program_name,0);
// если мы попадаем сюда, то ошибка при выполнении exec
perror("exec");
// завершение потомка
exit(0);
} else
// ошибка при выполнении fork
perror("fork");
...