在进程执行阻塞系统调用时(例如读或写),有一个信号到达。此时,该系统调用是否会以EINTR的错误码终止?在处理完信号后,系统调用是否会重新启动?
假设系统调用以EINTR错误码终止,在返回用户空间之前,内核会处理信号。
信号处理程序是在用户模式还是内核模式下执行的?如果是在用户模式下执行,那么在处理完信号后,会返回到系统调用(read/write)期间的指令吗?还是再次进入内核模式处理信号,并从ret_from_syscall返回给用户?在系统调用期间出现信号后,执行如何恢复到该系统调用之后的指令?
通过在sigaction中传递SA_RESTART标志,是否可以重新启动系统?
假设系统调用以EINTR错误码终止,在返回用户空间之前,内核会处理信号。
信号处理程序是在用户模式还是内核模式下执行的?如果是在用户模式下执行,那么在处理完信号后,会返回到系统调用(read/write)期间的指令吗?还是再次进入内核模式处理信号,并从ret_from_syscall返回给用户?在系统调用期间出现信号后,执行如何恢复到该系统调用之后的指令?
通过在sigaction中传递SA_RESTART标志,是否可以重新启动系统?