【问题标题】:How to send a signal to a process to cause call to exit() and terminate如何向进程发送信号以导致调用 exit() 并终止
【发布时间】: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


【解决方案1】:

按照 cmets 中的建议,我在 gdb 内执行了我的程序,并在收到信号后手动调用 exit(),它就像魅力一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2012-11-30
    • 2020-04-08
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多