Пример использования 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.он поддерживает не блокирование родительского процесса