(* Программа sigex -- демонстрирует работу sigaction *)
uses linux,stdio;

(* Простая функция для обработки сигнала SIGINT *)
procedure catchint (signo:integer);cdecl;
begin
  writeln (#$a'сигнал CATCHINT: signo=', signo);
  writeln ('сигнал CATCHINT: возврат'#$a);
end;
 

var
  act,oact:sigactionrec;
  mask:sigset_t;

begin
  (* Определение процедуры обработчика сигнала catchint *)

  (* Задание действия при получении сигнала SIGINT *)
  act.handler.sh := @catchint;
  (* Создать маску, включающую все сигналы *)
  sigfillset (@mask);
  act.sa_mask:=mask.__val[0];
  (* До вызова процедуры sigaction сигнал SIGINT
   * приводил к завершению процесса (действие по умолчанию)
   *)
  sigaction (SIGINT, @act, @oact);
  (* При получении сигнала SIGINT управление
   * будет передаваться процедуре catchint
   *)
  writeln ('вызов sleep номер 1');
  sleep (1);
  writeln ('вызов sleep номер 2');
  sleep (1);
  writeln ('вызов sleep номер 3');
  sleep (1);
  writeln ('вызов sleep номер 4');
  sleep (1);
  writeln ('Выход');
  halt(0);
end.