Управление процессом Forks в C в Linux / Unix - PullRequest
0 голосов
/ 16 декабря 2010

Мне интересно, как вы можете заставить дочерний процесс ждать выполнения оператора после того, как его родитель делает определенную вещь.

Мои потребности довольно просты, мне просто нужно порождать дочерний процесс с помощью fork, сделать так, чтобы родитель записал что-то в файл, затем чтобы потом ребенок записал что-то в файл, затем они оба закончат выполнение своих отдельных команд.

Я только узнал об использовании wait () и waitpid (), чтобы сначала выполнялись дочерние процессы, затем выполнялся родительский, но это, очевидно, здесь не сработает.

Есть идеи?

Помощь очень ценится, спасибо.

Ответы [ 3 ]

4 голосов
/ 16 декабря 2010

Вы можете использовать pipe() между родителем и ребенком.Родитель пишет ребенку через канал после того, как родитель завершил запись в файл.

1 голос
/ 16 декабря 2010

Почему бы вам не сделать так, чтобы родитель написал ее до появления на свет ребенка?

Если это не сработает, вам действительно следует подумать о том, является ли fork правильным инструментом для работы. Я видел здесь множество вопросов, связанных с fork, вероятно, из-за какого-то старого таймера. профессор с головой, похороненной в 70-х годах, не знал, что потоки POSIX являются инструментом для большинства таких работ. На самом деле только законное использование для fork запускает внешние программы (но posix_spawn - лучший интерфейс для этого) и передает тяжелые клиентские соединения (такие как сеансы ssh) совершенно новому процессу. в целях безопасности ему необходимо настроить свои привилегии и изолировать себя от других сеансов.

0 голосов
/ 20 декабря 2010

Используйте сигнал.Выберите один из служебных сигналов и попросите родителя отправить его ребенку после записи.

...