Я пытаюсь обновить некоторые навыки C, и я играю с кодом в fork и общаюсь между двумя процессами.Устранение неисправностей Родительский процесс после Fork, C
В приведенной ниже программе я ожидал, что сигнал SIGINT для ребенка заставит родителя прекратить работу до того, как он напечатает, что ребенок умер. Однако сообщение «Parent: chlid is dead» по-прежнему остается последним для печати.
Есть ли что-то, что мне не хватает?
Спасибо.
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
int main() {
char *msg;
int forkval, parentpid;
int p2c[2];
pipe(p2c);
forkval = fork();
if (forkval < 0) exit(EXIT_FAILURE);
if (forkval) { /* Parent */
msg = "Parent: reporting\n";
close(p2c[0]);
write(STDOUT_FILENO,msg,strlen(msg));
write(p2c[1], &forkval, sizeof(int));
close(p2c[1]);
wait(NULL);
msg = "Parent: chlid is dead\n";
write(STDOUT_FILENO, msg, strlen(msg));
} else { /* Child */
msg = "Child: reporting\n";
close(p2c[1]);
write(STDOUT_FILENO,msg,strlen(msg));
read(p2c[0], &parentpid, sizeof(int));
close(p2c[0]);
fprintf(stdout, "Child: parent's pid is %i\n", parentpid);
kill(parentpid,SIGINT);
fprintf(stdout, "Child: dying\n");
}
exit(EXIT_SUCCESS);
}
терминальный выход:
Parent: reporting
Child: reporting
Child: parent's pid is 10940
Parent: chlid is dead
Эта строка: читать (p2c [0], & parentpid, sizeof (int)); на самом деле является дочерним PID, а не родительским PID. Так что ребенок убивает себя – user3629249