【发布时间】:2013-12-17 00:34:54
【问题描述】:
我有一个在 Linux 命令行上运行的程序。它分配一些内存,打开一些文件描述符等。我想要一个好方法,让用户输入停止程序,同时仍然进行清理并且不中断一些文件读/写。这样做的正确方法是什么?到目前为止,我一直在使用 CTRL+C 来停止程序,但我觉得这并没有正确地进行清理,并且这不会让我的程序有机会写入日志文件以指示它正在关闭。 目前我正在这样做: - 将 STDIN 设置为非阻塞(这样程序就不会挂起等待输入)
while(loop_variable != 'q') {
loop_variable = getchar();
...
}
有什么建议吗?
【问题讨论】:
-
捕获 SIGINT,当用户键入 ^C 时发送
-
你的程序没有“感觉”什么样的清理?终止进程后,内核会为您清理所有内容。
-
或者只是让用户输入 ^D 以便 getchar 将返回 EOF。
-
同时捕获
SIGTERM并在终止时正确清理。 -
我想在程序结束时有一个日志条目,等等。我知道内核会清理所有内容,但我无法想象这是最好的方法。
标签: c linux command-line posix