博客
关于我
【进程】wait() 函数详细分析
阅读量:498 次
发布时间:2019-03-07

本文共 1648 字,大约阅读时间需要 5 分钟。

wait和waitpid的区别及使用方法

1. 概念理解

在POSIX系统中,wait()waitpid()是两种常用系统调用的主要区别在于执行时的行为特征和作用效果。本文将从功能与行为特点入手,系统分析两者之间的根本差异。


2. 阻塞与非阻塞

2.1 阻塞机制

  • wait()函数的行为:调用wait()会使得当前进程阻塞,直到它的任意一个子进程结束才会返回。子进程结束会引发SIGCHLD信号,当该信号未被处理或处理结果不明确时,进程会保持阻塞状态。
  • 阻塞条件:如果有一个子进程结束,不管其他子进程是否继续运行,父进程都将被阻塞,直到某种方式唤醒它。这种规则与子进程的终止状态直接相关。

2.2 非阻塞机制

  • waitpid()函数的行为:调用waitpid()wait()不同之处在于,调用者可以选择等待特定进程ID或设置为非阻塞模式。实现上,waitpid()的非阻塞行为通过WNOFILLPG标志位控制。在非阻塞模式下,可继续执行其他任务,当有SIGCHLD信号被触发时,通过waitpid()获取子进程的终止状态,而不会阻塞当前执行流程。

2.3 特殊情境

  • 已终止的子进程:如果已有子进程终止并等待父进程确认,其信息可以立即被获取,无需继续等待。
  • No child,即没有子进程:调用waitpid()如果父进程不存在子进程,系统会立即返回错误,避免无效等待。

3. 等待子进程状态的获取

3.1 wait函数的特点

  • 单次等待wait()函数执行后,会返回当有一个子进程终止时的信息。此时需要多次调用wait()以获取所有子进程的终止状态。
  • 阻塞默认设置:需要通过信号处理机制,比如设置SA_NOCHLD来防止父进程被阻塞,否则子进程可能成为僵尸进程。

3.2 waitpid函数的特点

  • 条件等待waitpid()允许在等待特定子进程时,处理多个子进程终止事件,不会阻塞当前进程。
  • 进程选择灵活:可以通过进程ID或正例如选择等待哪些进程,适用于多个子进程的情况。

4. 与SIGCHLD信号的关系

4.1 信号默认处理

  • 系统默认设置:子进程终止时,会触发SIGCHLD信号,父进程若未设置SA_NOCHLD,会,默认地安装SA_ONSTACK处理程序,导致wait()函数被调用,从而防止子进程成为僵尸。

4.2 专家级处理方式

  • 信号处理程序管理:开发者可以在自己的信号处理函数中,自行调用wait()waitpid(),以控制何时和如何接收子进程终止信息,从而灵活管理父进程的等待行为。

5. 父进程的同步与异步模式

5.1 同步模式

  • 默认阻塞处理:使用wait()并默认处理SIGCHLD信号时,父进程会以同步方式等待子进程终止。在此模式下,父进程必须等待子进程完成后才能继续其他任务,避免资源竞争。

5.2 异步模式

  • 信号捕获与处理:通过安装自己的SIGCHLD信号处理函数,可以在不阻塞的情况下,异步获取子进程终止信息。这种方式允许父进程在多任务处理中,及时响应子进程事件。

6. wait函数何时返回?

  • 状态变化触发wait()函数返回时,总是伴随着某个子进程的终止状态。
  • 被设置为SA_INTERRUPT:在特殊情况下,父进程可以被中断,绕过正常的等待逻辑。

7. wait函数之与SIGCHLD信号的关系

7.1 信号来源

  • 里程碑事件:一旦一个子进程终止,内核会向父进程发送SIGCHLD信号,触发等待逻辑。

7.2 信号的重要性

  • 状态通知机制:这是内核向父进程传递子进程终止信息的关键方式,使得父进程才能知晓子进程的状态变化。

8. 总结

wait()waitpid()是POSIX系统中等待子进程终止的两大工具,两者的主要差别在于执行方式和控制能力。选择哪个函数取决于具体需求:如果需要防止阻塞且灵活处理多个终止事件,可以用waitpid();如果只需要简单等待子进程终止,可以用wait()。通过合理配置信号处理,父进程可以实现既高效又灵活的多任务处理。

转载地址:http://tsacz.baihongyu.com/

你可能感兴趣的文章
java教学团队管理系统(ssm)
查看>>
java教学网站(ssm)
查看>>
java教学质量管理平台(ssm)
查看>>
@Transactional踩坑实践,你能看的出来么?
查看>>
java教师信息采集系统(ssm)
查看>>
java教师教学质量评估系统(ssm)
查看>>
java教师管理系统(ssm)
查看>>
java教师管理系统(ssm)
查看>>
java教师管理系统(ssm)
查看>>
java教师继续教育(ssm)
查看>>
java教师绩效考核过程管理系统(ssm)
查看>>
java教师课堂助手app(ssm)
查看>>
java教师课程管理与教学辅助系统(ssm)
查看>>
java教研室采购管理系统(ssm)
查看>>
java教职工离兰返兰行程报备系统(ssm)
查看>>
java教育培训系统(ssm)
查看>>
java教育机构管理(ssm)
查看>>
"头脑的自行车" 是什么玩意?
查看>>
java教育质量测评系统(ssm)
查看>>
java教育辅导班信息网(ssm)
查看>>