На уровне ОС в любой POSIX-совместимой ОС (Unix, Linux, Darwin и др. c) процесс, который завершился, но еще не был собран его вышестоящим, находится в "несуществующем" состояние "или" зомб ie ". Он все еще существует, но его нельзя убить: он уже мертв. Он существует именно для того, чтобы его старший - процесс, который может вызывать системный вызов уровня ОС wait
- может вызывать системный вызов уровня ОС wait
и видеть , что процесс теперь мертв.
Как только его начальник дождался этого, процесс действительно удален: больше нет процесса-зомба ie, захватывающего этот идентификатор процесса. Если у вас файловая система /proc
, это происходит тогда, когда процесс исчезает из /proc
.
В Go вызов cmd.Wait()
вызывает вызов wait
уровня ОС, так что это способ сделать это. Если вы хотите получить результат этого cmd.Wait()
, хороший способ сделать это - отправить его по каналу.
(Если вы хотите запустить очень долгий процесс и не ждать его , вы можете отклонить его, так что вы больше не будете его начальником. Подробности о том, как сделать это правильно, полны c мелочей, специфичных для ОС, таких как отмена контрольных ttys, установка сеансов с использованием procctl
или prctl
и т. д.)