系统调用文档 read() read() 如果被信号中断,立即返回。返回的值反映到目前为止它成功读取了多少字节。这似乎意味着一些系统调用有自己的信号处理程序。
read()
读取() 正在从管道中读取数据(由 pipe() ),但管道中没有可用的字节,因此 正在阻塞线程。现在,如果我发一封信 SIGINT 从终端(通过Ctrl+C),程序将终止。
读取()
pipe()
SIGINT
信号 打印一条信息 "SIGINT is received" . 什么时候? 是阻塞,我使用Ctrl+C,程序是否会在打印消息时终止,或者程序是否仍会以静默方式终止,因为 信号 读取()
信号
"SIGINT is received"
(我的实验表明是后一种情况。。(不确定)
这似乎意味着一些系统调用有自己的信号处理程序。
read(2)
现在假设您已经处理了SIGINT信号,并在程序被阻塞时发送它 然后,根据信号处理程序的安装方式,可以观察到两种行为。
在这两种情况下,由于SIGINT被处理,程序不会终止。
假设在程序启动时,我为SIGINT安装了一个信号处理程序,它打印一条消息“SIGINT is received”。当read()被阻塞并且我使用Ctrl+C时,程序是否会在打印该消息时终止,或者程序是否仍会静默终止,因为SIGINT已经由read()的信号处理程序处理?