Я пытаюсь написать программу, в которой программа непрерывно принимает пользовательский ввод через цикл while, и в каждом цикле разветвляется новый дочерний элемент текущего процесса программы при запуске сценария оболочки. Вот что у меня сейчас есть:
int main(int argc, char **argv)
{
while(!feof(stdin)){
printf("Port Number:");
fgets(portno, 100, stdin);
input[strlen(portno) - 1] = '\0';
pid_t pid = fork();
if (pid < 0){
die("fork did not work");
} else if (pid == 0){
fprintf(stderr, "[pid=%d] ", (int)getpid());
fprintf(stderr, "process started on port %s\n", portno);
execl("./netcattest.sh", "netcattest.sh", portno, (char *)0);
die("program failed");
} else {
/*
if (waitpid(.... NEED HELP ON THIS PART
*/
fprintf(stderr, "[pid=%d] ", (int)pid);
fprintf(stderr, "program terminated\n");
}
}
return 0;
}
У меня проблема с чтением документации по waitpid, мне немного непонятно, как использовать эту функцию. Я хочу, чтобы в случае, когда программа являлась родительским процессом, я хотел как-то идентифицировать все процессы, которые в данный момент завершены.
Например, если я выполнил цикл 3 раза, и где-то после второго цикла первый процесс завершился, я хочу каким-то образом определить идентификатор процесса, который завершился.
Я знаю, что это связано с использованием опции WNOHANG, но я действительно не понимаю, как она работает.
Большое спасибо, ребята.
РЕДАКТИРОВАТЬ: Кроме того, есть ли быстрый способ сделать 4 отступа для фрагмента кода, а не просто пробел каждой строки по отдельности?