sleep
é um kluge que pode não funcionar se o sistema estiver ocupado ou exigir um atraso desnecessariamente longo. Uma abordagem melhor é a comunicação entre o pai e o filho, de modo que o filho bloqueie até que o pai responda ou, nesse caso, desapareça. Isso pode ser feito com um pipe e um bloqueio read
no processo filho que bloqueia até que o pai (algum tempo depois ...) desapareça.
#include <err.h>
#include <errno.h>
#include <unistd.h>
int main(void)
{
char ch;
int fd[2];
pid_t pid;
ssize_t ret;
pipe(fd);
pid = fork();
if (pid < 0) {
err(1, "fork failed");
} else if (pid == 0) { /* child */
close(fd[1]);
warnx("child %d start", getpid());
// block until parent goes away
ret = read(fd[0], &ch, 1);
warnx("child %d parent gone", getpid());
} else { /* parent */
// simulate system being slow
sleep(3);
}
return 0;
}