有没有办法在GNU Prolog中“捕捉”(例如'捕捉')操作系统信号? (我使用的是Ubuntu/Linux,最新的gprolog)。在GNU-Prolog中,我能“捕捉”一个linux信号吗?
我想很久以前我曾经在WAMCC这种方法,在此之前演变为GNU序言:
:- 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的解决方案。
嗨 - 仍然希望对此有所帮助......但同时我可以评论说,这个需求的原因是一个并行处理实验方法,其中Prolog可执行文件可能被另一个进程中断,并且在那一点上如果咳嗽一个代表其当前搜索进度的“状态”值,以便可以将处理从该点分离并分配给其他处理器。在这方面有很多工作,但我的方法取决于这个中断能力,它在wamcc中有。 – Bambam
@Bamb:听起来很像Condor。该州有多大?作为一个底线喂养员,我经常写出一个州。 – false
我刚刚研究出'赏金'来自哪里......谢谢你。 – Bambam