Для дочерних процессов другие решения, такие как отправка сигнала, не будут работать должным образом: они будут указывать, что процесс все еще выполняется, когда он действительно завершился.
Вы можете использовать Process.waitpid , если хотите проверить процесс, который вы создали сами. Вызов не будет заблокирован, если вы используете флаг Process::WNOHANG
и nil
будет возвращено, пока дочерний процесс не завершится.
Пример:
pid = Process.spawn('sleep 5')
Process.waitpid(pid, Process::WNOHANG) # => nil
sleep 5
Process.waitpid(pid, Process::WNOHANG) # => pid
Если pid не принадлежит дочернему процессу, будет сгенерировано исключение (Errno::ECHILD: No child processes
).
То же самое относится к Process.waitpid2 .