Если мы оказались здесь, то
*)
writeln ('Потомок ',getpid,' пауза...');
sleep(4);
halt(5); (* выход с ненулевым значением *)
end;
(* Если мы оказались здесь, то это родительский процесс *)
(* Проверить, закончился ли дочерний процесс, и если нет, *)
(* то сделать секундную паузу, и потом проверить снова *)
while (waitpid (pid, @status, WNOHANG) = 0) do
begin
writeln ('Ожидание продолжается...\n');
sleep(1);
end;
(* Проверка статуса завершения дочернего процесса *)
if WIFEXITED (status) then
begin
exit_status := WEXITSTATUS (status);
writeln ('Статус завершения ',pid,' равен ', exit_status);
end;
halt(0);
end.
При запуске программы получим следующий вывод:
Ожидание продолжается...
Потомок 12857 пауза...
Ожидание продолжается...
Ожидание продолжается...
Ожидание продолжается...
Статус завершения 12857 равен 5