在我的代码中有一个名为NSM的进程。它突然收到信号陷阱信号,然后被杀死了。所以只是想知道什么时候进程可以得到SIGTRAP信号?
rhfm7lfc1#
正如评论中所说,这是一个信号,可以随时触发。SIGTRAP信号由调试器处理;在没有调试器的情况下,进程被终止是很自然的。如果你在项目中使用静态库,那么你没有正确地链接它们。如果你的问题没有进一步的信息,我建议你检查你与图书馆的链接。
q3qa4bjr2#
有些库在出现严重错误时会引发SIGTRAP。例如,在GLIB中,加入线程的g_thread_join()服务依赖于底层PTHREAD库中的pthread_join()。为了防止死锁,后者会检查是否有两个线程试图相互连接,或者当前线程试图连接自己。如果发生任何一种情况,则将EDEADLKerrno返回给调用方。在出现这种错误时,调用GLIB会引发一个SIGTRAP信号。因此,如果调试器附加到正在运行的进程,则允许调试问题。
g_thread_join()
pthread_join()
2条答案
按热度按时间rhfm7lfc1#
正如评论中所说,这是一个信号,可以随时触发。SIGTRAP信号由调试器处理;在没有调试器的情况下,进程被终止是很自然的。如果你在项目中使用静态库,那么你没有正确地链接它们。如果你的问题没有进一步的信息,我建议你检查你与图书馆的链接。
q3qa4bjr2#
有些库在出现严重错误时会引发SIGTRAP。
例如,在GLIB中,加入线程的
g_thread_join()
服务依赖于底层PTHREAD库中的pthread_join()
。为了防止死锁,后者会检查是否有两个线程试图相互连接,或者当前线程试图连接自己。如果发生任何一种情况,则将EDEADLKerrno返回给调用方。在出现这种错误时,调用GLIB会引发一个SIGTRAP信号。因此,如果调试器附加到正在运行的进程,则允许调试问题。