【发布时间】:2016-06-30 19:04:04
【问题描述】:
我有一个程序,它只在正常返回或调用exit() 函数时生成输出(我试图在C 程序上使用gcov)。在一个特殊的输入上,我的程序挂在一个无限循环中,所以我必须通过发送终止信号来终止它。在这种情况下,它不会产生我需要的输出,因为它不会调用 exit()。
有什么方法可以强制正在运行的程序调用exit() 并在不接触源代码和编写信号处理程序的情况下终止?
【问题讨论】:
-
用调试器附加到它并告诉它调用
exit()。 -
没有默认动作是调用
exit()的信号。信号要么被忽略,要么立即终止进程,要么执行特殊操作,如暂停进程。 -
您可以为共享库提供并由程序使用的函数编写替换。使用
LD_PRELOAD加载替换函数,它可以检查任何条件并调用exit(),否则它很可能会调用原始函数。更多关于LD_PRELOAD的信息在这里:stackoverflow.com/questions/426230/what-is-the-ld-preload-trick 这意味着被替换的函数在阻塞程序的逻辑中被调用。 -
正如@Barmar 建议的那样,我在
gdb内执行了我的程序,并在收到信号后调用exit()。效果很好。 -
您或@Barmer 为什么不将此添加为答案?所以至少这可以关闭。
标签: c gcov signal-handling