
系统调用可以被任何信号打断,包括SIGINT(由CTRL-C生成),SIGHUP等信号。
当
SA_RESTART被设置时,一个
send()将返回(与发送的计数),如果任何数据发送被接收到的信号之前,它会返回一个错误
EINTR,如果一个发送超时被设置(如那些无法重新启动),否则
send()将被重新启动。
系统调用重启是在内核的信号处理代码中实现的。系统调用
-ERESTARTSYS在检测到未决信号(或等待被信号中断)后在内部返回,这导致信号处理代码将指令指针和相关寄存器恢复到调用前的状态,从而使syscall重复执行。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)