【发布时间】:2021-05-05 14:14:47
【问题描述】:
场景 1
假设存在以下场景。
我的程序调用了一个 3rd 方库,该库又调用了另一个 3rd 方库,该库转身并进行操作系统调用。
MyProgram
|
some3rdPartyFunction() ---> 3rd party library
|
another3rdPartyFunction()----> another 3rd party library
|
OS call()
第一组问题:
- 如果此 OS 调用对已关闭的套接字进行套接字调用,会发生什么情况?
- 是否向进行 OS 调用的进程返回错误?
- 系统在什么时候返回 SIGPIPE 消息?
- SIGPIPE 是只发送到调用函数还是 SIGPIPE 会一直传播到 MyProgram?
场景 2
我碰巧看到一个进程的线程转储的以下输出。
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 还是被传播 从较低的操作系统调用开始?
- 随着发送的信号种类繁多,如何确定哪个是 究竟是什么原因造成的?
【问题讨论】: