从nanosleep()
中kernel/time/hrtimer.c
的来源和restart_syscall()
的联合帮助页看来,要使nanosleep()
在信号发出后以正确的超时重新启动,它将某些状态保存到current_thread_info()->restart_block
,返回ERESTART_RESTARTBLOCK
,并且信号传递代码将安排在信号处理程序返回后调用restart_syscall()
。但是:
current_thread_info()->restart_block
只有一个系统调用空间,所以在递归信号的情况下会发生什么?current_thread_info()->restart_block
。restart_syscall()
,而是将返回代码设置为-EINTR
。我在这段代码的目的或功能上的错误在哪里?
答案 0 :(得分:0)
我已经知道这是为了允许使用ptrace连接的调试器检查信号并改变进程的状态,并且这样的系统调用在被信号处理程序中断时返回EINTR。