前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Operating System 04 - wait()

Operating System 04 - wait()

作者头像
Reck Zhang
发布2021-08-11 12:00:08
3110
发布2021-08-11 12:00:08
举报
文章被收录于专栏:Reck ZhangReck Zhang

wait()

进程状态

状态

说明

R

running or runnable(on run queue)

D

uninterruptible sleep(usually I/O)

S

inerruptible sleep(waiting for an event to complete)

Z

terminated but not reaped by it’s parent

T

either by a job contro singnal or because it is being traced

process_status
process_status

SIGCHLD

当一个子进程改变了他的状态时(停止运行, 继续运行或者退出), 会有两件事情发生在父进程.

  1. 得到SIGCHLD信号
  2. waitpid()或者wait()调动会返回
SIGCHLD
SIGCHLD

其中子进程发送的SIGCHLD信号包含了子进程的信息, 包含了进程ID, 进程状态, 进程使用CPU时间等.

在子进程退出时, 他的进程描述符不会立即释放, 这是为了让父进程得到子进程信息, 父进程通过wait()或者waitpid()来获得一个已经退出的子进程信息.

wait()

代码语言:javascript
复制
pid_t wait(int* status)

父进程调用wait()会一直阻塞, 直到收到一个子进程退出的SIGCHLD信号, 之后wait()函数会销毁子进程并返回.

如果成功, 返回被收集的子进程的进程ID, 如果调用进程没有子进程, 调用会失败, 此时返回-1, 同时errno被置为ECHILD.

参数status用来保存被收集的子进程退出时的一些状态, 如果对这个子进程是如何死掉的毫不在意, 只想把这个子进程消灭掉, 可以设置这个参数为NULL.

waitpid()

代码语言:javascript
复制
pid_t waitpid(pid_t pid, int* status, int options)

作用和wait()相同, 但是多了两个可由用户控制的参数pid和options.

pid参数指示这个子进程的ID, 表示只关心这个子进程退出的SIGCHLD信号, 如果结果为-1, 那么和wait()作用相同, 都是关心所有子进程退出的SIGCHLD信号.

options参数主要有WNOHANG和WUNTRACED两个, 前者可以使waitpid(), 调用变成非阻塞的, 也就是说他会立即返回, 父进程可以继续执行其他任务.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • wait()
    • 进程状态
      • SIGCHLD
        • wait()
      • waitpid()
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档