如何检查进程是否因调用 wait() 或 waitpid() 而处于等待状态?
How to check if a process is waiting due to call to wait() or waitpid()?
我看到在 sys_wait4
中(通过调用 wait()
或 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()
调用中被阻塞。
我看到在 sys_wait4
中(通过调用 wait()
或 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()
调用中被阻塞。