【发布时间】:2016-01-29 12:59:43
【问题描述】:
AFAIK,linux/unix 上的大多数系统调用在收到信号时都会中断。根据下面的博文,有一些系统调用没有被中断:
一般来说,立即返回的函数(不要等待任何 I/O 操作完成或休眠)不会像 socket(2) 那样被中断,它只是分配一个套接字并且不等待任何东西。
http://www.linuxprogrammingblog.com/all-about-linux-signals?page=5
有这类函数的列表吗?与此主题相关的任何链接都会有所帮助。
【问题讨论】:
-
当一个信号被阻塞时,它不会“中断”任何系统调用。一些 NFS 挂载的文件系统可能存在一些边界情况。但是你为什么在乎呢?
-
恐怕我听不懂你。什么是“信号被阻塞”?澄清一下,我说的是用 EINTR 中断系统调用。 man7.org/linux/man-pages/man7/signal.7.html(信号处理程序中断系统调用和库函数)内核使用什么机制来决定哪个调用是可中断的,哪个不是? (如果“socket()”的故事是真的)。
-
每个系统调用的规范(手册页)告诉它是否可以获得
EINTR
标签: linux unix linux-kernel kernel signals