2016-11-07 122 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()調用中被阻止。