Чтобы получить сигнал завершения от дочерних процессов, имеющих идентификатор группы процессов, равный идентификатору родительской группы процессов - PullRequest
0 голосов
/ 08 июля 2019

Я хочу сделать некоторые вычисления, когда дочерний процесс завершается / завершается. Чтобы получить сигнал завершения от дочерних процессов с идентификатором группы процессов, равным идентификатору родительской группы процессов, я использую 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 дочерних процессов в моей среде, так как есть много мест, где дочерние процессы создаются и завершаются.
Пожалуйста, дайте мне знать, если я могу достичь своих целей здесь.

...