Я использую posix_spawnp для выполнения различных процессов и проверяю статус (с помощью waitpid), чтобы убедиться, что дочерний элемент был создан правильно
int iRet = posix_spawnp(&iPID, zPath, NULL, NULL, argv, environ);
if (iRet != 0)
{
return false;
}
int iState;
waitpid(static_cast<pid_t>(iPID), &iState, WNOHANG);
cout << "Wait: PID " << iPID << " | State " << iState << endl;
if (WIFEXITED(iState)) {
printf("Child exited with RC=%d\n",WEXITSTATUS(iState));
}
else if (WIFSIGNALED(iState)) {
printf("Child exited via signal %d\n",WTERMSIG(iState));
}
else
{
printf("Child is NORMAL");
}
Сначала это выполняется правильно, и я получаю следующее сообщение:
Подождите: PID 15911 | Состояние 0 Ребенок вышел
с RC = 0
После выполнения одного и того же процесса несколько раз дочерний процесс начинает выходить со статусом 127.
Подождите: PID 15947 | Штат 32512 Детский
выход с RC = 127
После того, как это произошло, я не мог заставить ребенка снова порождаться. Я заключил секцию кода, приведенную выше, в цикл for, но он не будет правильно создаваться.
Если я перезапущу родительский процесс, он работает некоторое время, но через некоторое время снова возникает та же проблема.
Что я здесь не так делаю?