Я хочу сделать некоторые вычисления, когда дочерний процесс завершается / завершается. Чтобы получить сигнал завершения от дочерних процессов с идентификатором группы процессов, равным идентификатору родительской группы процессов, я использую waitpid()
.
Аргументы waitpid
, которые я здесь использую:
pid = 0
, что означает ожидание любого дочернего процесса, чей идентификатор группы процессов равен идентификатору вызывающего процесса.
Status = status
, чтобы получить статус.
Options = 0
.
Вот моя часть кода cpp:
while(1) {
pid = waitpid(0, &status, 0);
std::cout << "pid: " << pid << " status value: " << status << “ WIFEXITED : ” << WIFEXITED(status) << “ WEXITSTATUS: “ << WEXITSTATUS(status) << std::endl;
doCalculation();
}
Когда я пытаюсь запустить его, я получаю следующие результаты:
pid: -1 status value: 32767 WIFEXITED : 0 WEXITSTATUS: 127
pid: -1 status value: 32767 WIFEXITED : 0 WEXITSTATUS: 127
pid: -1 status value: 32767 WIFEXITED : 0 WEXITSTATUS: 127
pid: -1 status value: 32767 WIFEXITED : 0 WEXITSTATUS: 127
здесь, pid = -1
подразумевает ошибку
Я хочу выполнять вычисления только в том случае, если дочерний процесс завершается / завершается, но код не останавливается и продолжает работать. Невозможно сохранить pid дочерних процессов в моей среде, так как есть много мест, где дочерние процессы создаются и завершаются.
Пожалуйста, дайте мне знать, если я могу достичь своих целей здесь.