Ваш вопрос немного сложен для понимания, поскольку вы на самом деле не объясняете, в чем заключается ошибка, но у меня есть один вопрос, который, я уверен, будет уместным.
Почему процесс "отец" убивает своего ребенка и его родителя ? Разве он не должен убить своего ребенка и себя (id_process
и getpid()
, а не getppid()
, который является родительским PID)?
Кажется, это проблема. Когда я запускаю это под Cygwin, это убивает мою оболочку (чертовски раздражает). Если я изменю его на kill (getpid(),SIGKILL);
, через пять секунд он будет нормально завершен со следующим выводом:
$ vi qq.cpp ; g++ -o qq qq.cpp ; ./qq.exe
Fathers ID is 6016
Childrens ID is 4512
Children RUN FOREVER ^^
Children RUN FOREVER ^^
Children RUN FOREVER ^^
Children RUN FOREVER ^^
Children RUN FOREVER ^^
Killed
Это с программой, модифицированной следующим образом:
#include <iostream>
#include <string>
#include <sys/types.h>
#include <unistd.h>
int id_process;
void manager_signal (int x) {
kill (id_process, SIGKILL);
kill (getpid(),SIGKILL);
}
int main () {
id_process = fork ();
if (id_process==-1) {
perror("ERROR to create the fork");
} else {
if ( id_process != 0 ) {
printf("Fathers ID is %d\n", getpid());
alarm(5);
(void) signal (SIGALRM, manager_signal);
sleep (20);
printf ("Running to where the father can be\n");
alarm (0);
} else {
printf ("Childrens ID is %d\n", getpid ());
for (;;) {
printf ( "Children RUN FOREVER ^^\n");
sleep (1);
}
}
}
return 0;
}