Я хочу разветвить процесс, а затем сделать следующее в родительском:
Подождите, пока он завершится естественным образом или истечет время ожидания, установленное родителем (что-то вроде waitforsingalobject в Windows), после чего я убью процесс, используя kill (pid);
Получить код выхода дочернего процесса (при условии, что он завершился естественным образом)
Мне нужно иметь доступ к std::cout дочернего процесса от родителя.
Я попытался использовать waitpid(), однако, хотя это позволяет мне получить доступ к коду возврата, я не могу реализовать тайм-аут с помощью этой функции.
Я также рассмотрел следующее решение (https://www.linuxprogrammingblog.com/code-examples/signal-waiting-sigtimedwait), что позволяет мне реализовать тайм-аут, однако, похоже, нет способа получить код возврата.
Полагаю, мой вопрос сводится к тому, как правильно добиться этого в Linux?
waitpid
с параметромWNOHANG
для опросить статус дочернего процесса. Делайте это в цикле, читая вывод дочернего процесса до истечения времени ожидания (или дочернего процесса). - person Some programmer dude   schedule 23.05.2017waitpid
после завершения (или уничтожения) дочернего процесса, что позволяет вам получить код выхода. - person Some programmer dude   schedule 23.05.2017waitpid
— это статус. Вы можете получить код возврата из него с помощью макросаWEXITSTATUS
. - person nefas   schedule 23.05.2017wait
для получения информации о состоянии процесса. Я думаю, вам нужно немного поискать и узнать больше о том, как работают процессы в системах POSIX (таких как Linux и macOS). Короче говоря, программа, на которую вы ссылаетесь, должна работать точно так, как вы хотите (в отношении времени ожидания), если вы просто получаете статус от этого вызоваwaitpid
(вместо передачиNULL
). - person Some programmer dude   schedule 23.05.2017SIGALRM
, когда таймер истечет, и это прерветwaitpid
. Обработчик сигнала может вызватьkill
для отправки дочернему сигналу завершения. (kill
— один из допустимых системных вызовов, которые можно использовать в обработчике сигналов). - person Mark Plotnick   schedule 23.05.2017