2016-11-07 73 views
0

我看到,在sys_wait4(即通过调用达到wait()waitpid()),我们插入当前处理成保存在其结构任务提供专门的队列:如何检查进程是否因等待()或waitpid()调用而等待?

DECLARE_WAITQUEUE(wait, current);  
add_wait_queue(&current->wait_chldexit,&wait); 

所以,如果我要检查,如果由于致电wait()waitpid(),某些进程正在等待,我需要检查它是否在它自己的(???)wait_chldexit队列中?

所以只有进程本身可以插入到自己的wait_chldexit队列中?

我说得对吗?

这是linux内核2.4。

回答

1

是的,waitqueue current->wait_chldexit可能包含当前进程的单个元素或完全不包含的元素。

没有人唤醒了等待队列,而是等待被来自子线程的信号打断。

通过检查某个线程的等待队列,您可以检测该线程是否在wait()waitpid()调用中被阻止。