linux进程管理之wait系统调用
发布时间:2016-02-07 21:19:44 所属栏目:Linux 来源:网络整理
导读:六: wait4 ()系统调用 在父进程中,用wait4()可以获得子进程的退出状态,并且防止在父进程退出前,子进程退出造成僵死 状态。这是我们这节分析的最后一个小节了
1:申请一个等待队列: DECLARE_WAITQUEUE(): //name:等待队列的名字。Tsk:所要操作的task #define DECLARE_WAITQUEUE(name, tsk) wait_queue_t name = __WAITQUEUE_INITIALIZER(name, tsk) #define __WAITQUEUE_INITIALIZER(name, tsk) { .private = tsk, .func = default_wake_function, .task_list = { NULL, NULL } } default_wake_function()为默认的唤醒处理函数。 2:添加等待队列。 在上面的代码中,有: add_wait_queue(¤t->signal->wait_chldexit,&wait); 它的意思是将wait添加至¤t->signal->wait_chldexit中。代码如下: void fastcall add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait) { unsigned long flags; wait->flags &= ~WQ_FLAG_EXCLUSIVE; //为了防止竞争。加锁 spin_lock_irqsave(&q->lock, flags); //添加至队列 __add_wait_queue(q, wait); //解锁 spin_unlock_irqrestore(&q->lock, flags); } 3:唤醒操作: 在do_notify_parent()中有这样的代码片段: …… __wake_up_parent(tsk, tsk->parent); …… __wake_up_parent()的代码如下: static inline void __wake_up_parent(struct task_struct *p, struct task_struct *parent) { wake_up_interruptible_sync(&parent->signal->wait_chldexit); } (编辑:应用网_镇江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐