Você precisará se livrar do shell intermediário e iniciá-lo como seu filho direto, provavelmente com algo como proc_open
(não sou especialista em PHP). Então você receberá um SIGCHLD
quando o filho terminar. Você pode instalar um manipulador de sinal para ele ( pcntl_signal
mais provável) e nele não bloquear ( WNOHANG
) esperar ( pcntl_waitpid
) no PID do seu filho e se a espera for bem sucedida, registre a hora e remova o manipulador de sinal.
file_exists("/proc/{$pid}")
não é confiável se você não controlar as chamadas wait
(se pid
não for seu filho) porque os PIDs são reciclados.