Я пишу программу, которая будет в конечном итоге использоваться для того, чтобы один дочерний процесс отправлял случайно сгенерированные символы через канал другому дочернему процессу для преобразования в значения в верхнем регистре и вывода, но прежде чем я зайду так далеко,Я пытаюсь создать дочерние процессы и сделать некоторые ожидаемые результаты.Я написал следующее приложение:
#include <stdio.h> /* printf, stderr, fprintf */
#include <sys/types.h> /* pid_t */
#include <unistd.h> /* fork */
#include <stdlib.h> /* _exit */
#include <errno.h> /* errno */
int main()
{
pid_t writer;
pid_t reader;
writer = fork();
if (writer == -1)
{
fprintf(stderr, "can't fork, error %d\n", errno);
exit(1);
}
if (writer == 0)
{
printf("Writer process created.\n");
reader = fork();
if (reader == -1)
{
fprintf(stderr, "can't fork, error %d\n", errno);
exit(1);
}
if (reader == 0)
{
printf("Reader process created.\n");
kill(reader);
printf("Reader was successfully murdered.\n");
}
kill(writer);
}
wait();
printf("Writer killed.\n");
return 0;
}
В идеале я хотел бы, чтобы вывод получился следующим:
Writer process created.
Reader process created.
Reader was successfully murdered.
Writer killed.
Но с этого момента он выдает:
Writer process created.
Reader process created.
Reader was successfully murdered.
Writer killed.
Writer killed.
Writer killed.
Это похоже на прохождение всей итерации кода для родительского процесса и двух дочерних процессов с момента их создания, что также заставляет меня поверить, что их не убивают приподходящее время, когда я хочу их.Может ли кто-нибудь указать мне правильное направление?