我一直在玩一些调试并编写了一些C代码,这些代码执行了许多与Valgrind一起运行的指针相关操作(作为Valgrind工具)。在过去的一个小时里,我改变了一些东西,结果程序执行正常,但在我尝试终止它时停止响应Ctrl + C.
我尝试通过gdb
运行程序并仍然观察到相同的行为。有人能告诉我是什么引发了这种行为吗?
UPDATE :我认为这是导致错误的无限递归,但我仍然很好奇它为什么不响应命令。
答案 0 :(得分:2)
非常严重挂起的程序。尝试打开另一个终端并执行
kill -SIGINT `pidof program-name`
(如果-SIGINT
不起作用,请转到-SIGTERM
和-SIGKILL
(警告SIGKILL 立即终止 否强>清理))
答案 1 :(得分:1)
至于如何这可能发生,当希望实际处理中断,比如做一些清理时,它会注册自己的中断处理程序而不是默认处理程序(通常只需调用exit()
或abort()
,具体取决于具体的中断)。如果该中断存在错误,则会发生处理程序,但程序实际上并未按预期工作。因为杀掉程序的唯一方法是发送一个中断,然后你根本就不能杀掉程序。
嗯,实际上,有一个中断你无法用SIGKILL
执行此操作。您无法在程序中执行任何操作,以防止通过立即调用abort()