Есть ли способ "захватить" (например, "catch" ) сигнал операционной системы в GNU Prolog? (Я использую Ubuntu/Linux, последний gprolog).
Я думаю, что давным-давно я использовал этот подход в WAMCC, прежде чем это превратилось в GNU Prolog:
:- catch(Long_Running_Goal,signal(2),write('program interrupted'))
Но если я проведу это, используя бесконечный цикл (повторить, сбой), например,
:- catch((repeat,fail),X,write(X)).
В интерпретаторе Ctrl-C по-прежнему приводит меня к трассировке/отладчику, и скомпилированная программа просто завершает работу, если я прерываю ее с помощью kill -1
, kill -2
и т.д.
Я попытался скомпилировать программу с помощью --no-top-level
, если значение по умолчанию как-то захватывает сигнал, но это не имеет никакого значения.
У SWI-Prolog есть подходящий встроенный предикат on_signal
, который служит цели, но я ищу решение с gprolog, если это возможно.