Вызов функции при завершении дочернего процесса

#c #function #process

#c #функция #процесс

Вопрос:

В моей программе на c несколько дочерних процессов запускаются с использованием fork и execv. Я не жду их, поэтому они выполняются в фоновом режиме. Когда они завершат выполнение, я хочу запустить определенную функцию. Как это можно сделать?

Ответ №1:

Прослушайте SIGCHLD сигнал и вызовите свою функцию в обработчике. Будьте осторожны с тем, что вы вызываете в обработчике, вы должны вызывать только функции, защищенные от асинхронного сигнала.

Комментарии:

1. Откуда вы знаете, что это за функции?

2. @z-buffer: В конце этой страницы есть список: linux.die.net/man/2/signal

Ответ №2:

Я предполагаю, что вы действительно хотите дождаться завершения процессов, но вы хотите запускать процессы параллельно, а не последовательно. Если это так, запускайте каждый процесс, как вы делаете сейчас, затем используйте waitpid() системный вызов для каждого дочернего pid. Когда каждый процесс завершится, будут возвращены все идентификаторы ожидания.

Комментарии:

1. Нет, если вы хотите дождаться завершения подпроцессов.

2. Я не хочу, чтобы родительский процесс ждал дочернего процесса.