Используете waitpid или sigaction?

Я понял, что : 1) waitpid используется для ожидания смерти ребенка, а затем сбора SIGCHLD и статуса выхода ребенка и т. Д. 2) Когда у нас есть обработчик сигнала для SIGCHLD, мы делаем еще несколько вещей, связанных с очисткой дочернего элемента или другого материала (до программиста), а затем делаем waitpid, чтобы ребенок не стал зомби и затем вернулся.

Теперь, когда мы выполняем fork / exec и потомок возвращает результат, нам нужно, чтобы в наших программах были и 1, и 2? Если у нас есть оба, сначала получается SIGCHLD, поэтому первым вызывается обработчик сигнала и, таким образом, успешно вызывается его waitpid, а не waitpid в коде родительского процесса, как показано ниже:

my_signal_handler_for_sigchld
{
do something
tmp = waitpid(-1,NULL,0);
print tmp (which is the correct value of the child pid)
}

int main ()
{
  sigaction(SIGCHLD, my_signal_handler_for_sigchld)
  fork()
  if (child) //do something, return
  if parent // waitpid(child_pid, NULL,0); print value returned from this waitpid - it is -1
}

Благодарю, если кто-то поможет мне понять это.

7
задан Vin 23 January 2012 в 17:34
поделиться