Linux 关于预期行为的一般信号问题
情景1 假设存在以下场景 我的程序调用第三方库,第三方库反过来调用另一个第三方库,第三方库反过来调用操作系统Linux 关于预期行为的一般信号问题,linux,signals,sigpipe,Linux,Signals,Sigpipe,情景1 假设存在以下场景 我的程序调用第三方库,第三方库反过来调用另一个第三方库,第三方库反过来调用操作系统 MyProgram | some3rdPartyFunction() ---> 3rd party library | another3rdPartyFunction()----> another 3rd party libr
MyProgram
|
some3rdPartyFunction() ---> 3rd party library
|
another3rdPartyFunction()----> another 3rd party library
|
OS call()
第一组问题:
- 如果此操作系统调用对关闭的套接字进行套接字调用,会发生什么
- 是否向进行操作系统调用的进程返回了错误
- 系统在什么时候返回SIGPPIPE消息
- SIGPIPE是只发送给调用函数还是 SIGPIPE会一直传播到MyProgram吗
rt_sigprocmask(SIG_SETMASK, ...)
rt_sigreturn({mask=[PIPE]})
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigaction(SIGINT, [], [], 8) = 0
rt_sigaction(SIGTERM, [], [], 8) = 0
rt_sigaction(SIGHUP, [], [], 8) = 0
rt_sigaction(SIGABRT, [], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], [], 8) = 0
rt_sigreturn({mask=[PIPE]})
第二组问题:
- 为什么要发送这么多信号信息
- 这些是直接发送到MyProgram还是正在传播 从较低的操作系统调用向上
- 由于发送的信号种类繁多,如何确定哪一个是 究竟是什么导致了这个问题
write
的任何代码位,并为最终调用write
的线程生成信号
系统在什么时候返回SIGPPIPE消息
当尝试写入不可写入的套接字或管道时,会生成SIGPIPE
SIGPIPE是只发送给调用函数,还是一直传播到MyProgram
为调用线程生成SIGPIPE。它在呼叫链中的位置—您的程序、第三方库等—与信号传递无关
为什么要发送这么多信号信息
你所展示的东西没有被发送。大多数调用都是关于屏蔽和信号处理,而不是信号生成。rt\u sigreurn
调用告诉您这一点
这些是直接发送到MyProgram还是从较低的OS调用向上传播
我不明白这是什么意思。SIGPIPE是为进程中的特定线程生成的,无论MyProgram中的代码是否知道该线程的存在,或者第三方库是否“秘密”创建了该线程
随着各种各样的信号被发送,如何确定哪一个是真正导致问题的原因
在你展示的东西中只有一个信号产生,那就是信号管
如果此操作系统调用对关闭的套接字进行套接字调用,会发生什么
当谈到文件描述符(可能是关闭的)和流套接字(比如TCP,可能是部分或完全关闭的)时,“closed”可能有点误导。我想您要问的是一个POSIX文档:
[EPIPE]尝试对已关闭进行写入或不再连接的套接字进行写入。在后一种情况下,如果插座为SOCK_STREAM类型,则还应向螺纹发送SIGPIPE信号
是否向进行操作系统调用的进程返回了错误
错误将返回到名为write
的任何代码位,并为最终调用write
的线程生成信号
系统在什么时候返回SIGPPIPE消息
当尝试写入不可写入的套接字或管道时,会生成SIGPIPE
SIGPIPE是只发送给调用函数,还是一直传播到MyProgram
为调用线程生成SIGPIPE。它在呼叫链中的位置—您的程序、第三方库等—与信号传递无关
为什么要发送这么多信号信息
你所展示的东西没有被发送。大多数调用都是关于屏蔽和信号处理,而不是信号生成。rt\u sigreurn
调用告诉您这一点
这些是直接发送到MyProgram还是从较低的OS调用向上传播
我不明白这是什么意思。SIGPIPE是为进程中的特定线程生成的,无论MyProgram中的代码是否知道该线程的存在,或者第三方库是否“秘密”创建了该线程
随着各种各样的信号被发送,如何确定哪一个是真正导致问题的原因
您显示的内容中只生成了一个信号,那就是信号管。谢谢您的回复。我要把它通读几遍,进一步研究才能完全理解。谢谢你的回复。我将不得不把它通读几遍,并进一步研究以完全理解它。