#c #function #process
#c #функция #процесс
Вопрос:
В моей программе на c несколько дочерних процессов запускаются с использованием fork и execv. Я не жду их, поэтому они выполняются в фоновом режиме. Когда они завершат выполнение, я хочу запустить определенную функцию. Как это можно сделать?
Ответ №1:
Прослушайте SIGCHLD
сигнал и вызовите свою функцию в обработчике. Будьте осторожны с тем, что вы вызываете в обработчике, вы должны вызывать только функции, защищенные от асинхронного сигнала.
Комментарии:
1. Откуда вы знаете, что это за функции?
2. @z-buffer: В конце этой страницы есть список: linux.die.net/man/2/signal
Ответ №2:
Я предполагаю, что вы действительно хотите дождаться завершения процессов, но вы хотите запускать процессы параллельно, а не последовательно. Если это так, запускайте каждый процесс, как вы делаете сейчас, затем используйте waitpid()
системный вызов для каждого дочернего pid. Когда каждый процесс завершится, будут возвращены все идентификаторы ожидания.
Комментарии:
1. Нет, если вы хотите дождаться завершения подпроцессов.
2. Я не хочу, чтобы родительский процесс ждал дочернего процесса.