Пример использования waitpid ()?
Я знаю, что waitpid() используется для ожидания завершения процесса, но как его использовать?
вот что я хочу сделать, это создать двух детей и ждать, пока первый ребенок закончит, а затем убить второго ребенка, прежде чем выйти.
//Create two children
pid_t child1;
pid_t child2;
child1 = fork();
//wait for child1 to finish, then kill child2
waitpid() ... child1 {
kill(child2) }
2 ответов
синтаксис waitpid():
pid_t waitpid(pid_t pid, int *status, int options);
значение pid можно:
- 
: дождитесь любого дочернего процесса, идентификатор группы процессов которого равен абсолютному значению pid.
- -1: ждать любого дочернего процесса.
- 0: дождитесь любого дочернего процесса, идентификатор группы которого равен идентификатору вызывающего процесса.
- 
> 0: ждать ребенка чей идентификатор процесса равен значению pid.
значение параметра равно или равно нулю или более из следующих констант:
- 
WNOHANG: немедленно вернитесь, если ребенок не вышел.
- 
WUNTRACED: также вернитесь, если ребенок остановился. Статус для отслеживаемых детей, которые остановились, предоставляется, даже если этот параметр не указан.
- 
WCONTINUED: также возвратите если остановленный ребенок был возобновлен доставкойSIGCONT.
для получения дополнительной помощи, используйте man waitpid.
синтаксис
pid_t waitpid(pid_t pid, int *statusPtr, int options);
1.где pid-это процесс ребенка, он должен ждать.
2.statusPtr-указатель на расположение, в котором должна храниться информация о состоянии завершающего процесса.
3.задает необязательные действия для функции waitpid. Может быть указан один из следующих флагов опции или они могут быть объединены с побитовым включительным или оператор:
флаг wnohang WUNTRACED WCONTINUED
в случае успеха waitpid возвращает идентификатор завершенного процесса, состояние которого было сообщено. В случае неудачи возвращается значение -1.
преимущества за ожидание
1.Waitpid может использоваться, когда у вас есть более одного ребенка для процесса, и вы хотите дождаться, пока конкретный ребенок выполнит его выполнение, прежде чем родитель возобновит
2.с помощью waitpid поддерживает работу контроль
3.он поддерживает не блокирование родительского процесса
