如何检查进程是否因等待()或waitpid()调用而等待?
问题描述:
我看到,在sys_wait4
(即通过调用达到wait()
或waitpid()
),我们插入当前处理成保存在其结构任务提供专门的队列:如何检查进程是否因等待()或waitpid()调用而等待?
DECLARE_WAITQUEUE(wait, current);
add_wait_queue(¤t->wait_chldexit,&wait);
所以,如果我要检查,如果由于致电wait()
或waitpid()
,某些进程正在等待,我需要检查它是否在它自己的(???)wait_chldexit队列中?
所以只有进程本身可以插入到自己的wait_chldexit队列中?
我说得对吗?
这是linux内核2.4。
答
是的,waitqueue current->wait_chldexit
可能包含当前进程的单个元素或完全不包含的元素。
没有人唤醒了等待队列,而是等待被来自子线程的信号打断。
通过检查某个线程的等待队列,您可以检测该线程是否在wait()
或waitpid()
调用中被阻止。