2011-06-01 91 views
1

关于如何捕获关闭我的程序正在运行的终端窗口的任何想法? 虽然我在这里,任何方式来捕获当计算机关闭,但程序仍在运行,或者如果用户注销?C如何捕获关闭终端

+1

哪些操作系统? – 2011-06-01 21:37:30

+0

如果电源立即切断,该怎么办?是否需要立即清理,还是有可能在下一次开始清理时清理? – 2011-06-01 21:40:31

+0

@Neil:Linux,@Roland电源切断可以看作是一种特殊情况,所以我不能处理那个 – user657178 2011-06-02 13:16:41

回答

2

尝试捕捉SIGTERM。请注意,您无法捕获SIGKILL,这可能是一段时间后关机期间发生的情况。我发现这个really nice post也解释了一些差异。

[更新]在这里的长处,但测试如果std-in/out仍然是开放和良好的呢?当终端死掉时,应该放弃这些文件描述符。免责声明,这是最好的猜测。

+0

就像我说的,我试着测试捕获所有的各种信号。 SIGTERM我geuss会为Shutdown工作,还没有测试过,但它肯定不会结束终端...任何想法? – user657178 2011-06-02 13:17:51

+0

也许你的程序在控制台没有被真正杀死的时候。你应该能够验证,但无论哪种方式尝试测试标准输入/标准输出,看他们是否仍然“活着”。这是我得到的最好的。 – 2011-06-05 23:07:15

2

如果在Unix/Linux上:你看看SIGTERM吗?这至少是关机期间发送给您的。

+0

SIGTERM可能会用于关机,我还没有测试......但它绝对不能用于关闭终端,这对我来说现在更重要......任何想法? – user657178 2011-06-02 13:18:48

2

你可以试试atexit()函数吗?(见注释)

或者看看这个帖子在这里:Signals received by bash when terminal is closed

+1

atexit仅用于正常的程序终止,它被定义为“通过调用exit()或从main()返回” – 2011-06-01 21:42:03

+0

我的不好,你是完全正确的。 – Gui13 2011-06-01 21:45:23

1

从我的测试......,关闭终端时,我的程序接收到信号是1或SIGHUP

+0

说SIGTERM错误的答案。 SIGHUP是终端关闭时发送的信号。 – 2016-04-26 12:34:04