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