Вот разбивка моего кода.
У меня есть программа, которая разветвляет ребенка (и регистрирует pid ребенка в файле), а затем делает свое дело. Ребенок становится любой программой, которую программист удостоил argv. Когда дочерний процесс завершает выполнение, он посылает сигнал (используя SIGUSR1) обратно родительским процессам, чтобы родитель знал, как удалить дочерний элемент из файла. Родитель должен остановить секунду, подтвердить удаленную запись, обновив ее таблицу, и продолжить с того места, где он остановился.
pid = fork();
switch(pid){
case -1:{
exit(1);
}
case 0 :{
(*table[numP-1]).pid = getpid(); //Global that stores pids
add(); //saves table into a text file
freeT(table); //Frees table
execv(argv[3], &argv[4]); //Executes new program with argv
printf("finished execution\n");
del(getpid()); //Erases pid from file
refreshReq(); //Sends SIGUSR1 to parent
return 0;
}
default:{
... //Does its own thing
}
}
Проблема в том, что после того, как execv успешно запускается и заканчивается (оператор printf до возврата 0 дает мне знать), я не вижу остальных команд в выполняемом операторе switch. Мне интересно, есть ли в execv команда, подобная ^ C, которая убивает дочернего элемента при завершении и, следовательно, никогда не завершает остальные команды. Я заглянул в справочные страницы, но не нашел ничего полезного по этому вопросу.
Спасибо!