(* Программа status -- получение статуса завершения потомка *)
uses linux,stdio,crt;

procedure fatal(s:pchar);
begin
  perror(s);
  halt(1);
end;

var
  pid:longint;
  status, exit_status:integer;
begin
  pid := fork;
  if pid < 0 then
    fatal ('Ошибка вызова fork ');
  if pid = 0 then			(* потомок *)
  begin
    (* Вызвать библиотечную процедуру sleep
     * для временного прекращения работы на 4 секунды
     *)
    sleep(4);
    halt(5);			(* выход с ненулевым значением *)
  end;
  (* Если мы оказались здесь, то это родительский процесс, *)
  (* поэтому ожидать завершения дочернего процесса         *)
  pid := wait(@status);
  if pid = -1 then
  begin
    perror ('Ошибка вызова wait ');
    halt(2);
  end;
  (* Проверка статуса завершения дочернего процесса *)
  if WIFEXITED (status) then
  begin
    exit_status := WEXITSTATUS (status);
    writeln ('Статус завершения ',pid,' равен ', exit_status);
  end;
  halt(0);
end.
