根据文档(https://lwn.net/Articles/17744/),其中说“ nanosleep(),目前是该机制的唯一用户,只需将唤醒时间与指向用户参数的指针一起保存在重新启动块中。” 。
如果是这样,为什么nanosleep需要类型为req
的辩论者struct timespec *
。
根据linux程序手册,“ int nanosleep(const struct timespec * req,struct timespec * rem);如果调用被信号处理程序中断,nanosleep()返回-1,将errno设置为EINTR,并写入除非rem为NULL,否则rem指向结构的剩余时间。
我认为,如果内核可以在内部重新启动系统调用('do_nanosleep'),则无需将用户再次休眠的时间返回给用户空间。这就是我无法理解的。
根据说明文件(https://lwn.net/Articles/17744/),其中说“ nanosleep(),目前是该机制的唯一用户,只需将唤醒时间保存在重启块中,与...
ERESTARTSYS
永远不会从用户代码中看到,您是正确的。这是内核重新启动调用或将EINTR返回给用户代码的标志。请参阅this discussion on the Linux Kernel Mailing List:
问题的标题与实际问题并不完全匹配。 @dsolimano确实回答了标题。