我正在用 C++ 在 Linux 上开发一个应用程序(实际上是一个服务/守护程序),它需要与一个硬件接口。如果我的程序在终止时没有完全释放这些硬件的资源,那么我必须重新加载设备驱动程序,这个过程大约需要 10 分钟,并且由于明显的原因必须在每次测试程序之间等待 10 分钟令人沮丧。
所以我使用该sigaction()
函数来捕获一个 SIGINT(一个 ctrl-c),以便我的程序在完成后可以干净地关闭。从控制台运行程序时,这工作正常。但是,在 Netbeans 或 Eclipse(我都尝试过)中进行调试时,事情不起作用。
- 在 Eclipse 中,如果我在它提供的控制台中按 ctrl-c,它似乎并没有注册 SIGINT 曾经发生过
- 在 Eclipse 中,如果我在调试模式下运行程序然后使用
kill -SIGINT <pid>
,程序就会中断,就好像遇到断点一样 - 当我在控制台中按 ctrl-c 时,Netbeans 实际上似乎意识到已经发送了一个信号,并弹出一个对话框询问我是否要将其转发给应用程序。单击“转发并继续”似乎只是破坏了程序并且应用程序没有收到信号。它还说我可以在 Debug -> Dbx configure 中配置这些东西,这是一个不存在的菜单项
- 在 Netbeans 中,如果我在调试模式下运行程序然后使用
kill -SIGINT <pid>
,则行为与上述相同 kill
然后我添加了一个 SIGQUIT 处理程序,并尝试在 Netbeans 中调试时通过发送它。这一次,没有对话框出现,信号处理程序也永远不会被触发。
我需要一些方法来在调试时干净地关闭我的应用程序。有任何想法吗?