Выполните системный вызов kill(2)
с 0
в качестве сигнала.Если вызов успешен, это означает, что процесс с этим идентификатором pid существует.
Если вызов завершится неудачно и для errno
установлено значение ESRCH
, процесс с таким идентификатором не существует.
Цитирование стандарта POSIX:
Если sig равен 0 (нулевой сигнал), выполняется проверка ошибок, но сигнал фактически не отправляется.Нулевой сигнал может использоваться для проверки правильности pid.
Обратите внимание, что вы не защищены от условий гонки: возможно, что целевой процесс завершился, и другой процесс с таким же pid былначалось тем временем.Или процесс может очень быстро завершиться после того, как вы его проверите, и вы можете принять решение на основе устаревшей информации.
Только если данный pid относится к дочернему процессу (fork
'ed из текущего), вы можете использовать waitpid(2)
с опцией WNOHANG
или попытаться поймать SIGCHLD
сигналы.Они безопасны от условий гонки, но имеют отношение только к дочерним процессам.