c - 为什么 wait4() 被 waitpid() 取代

标签 c linux wait system-calls waitpid

我正在浏览系统调用的文档 wait4()在它的手册页中写着

These functions are obsolete; use waitpid(2) or waitid(2) in new programs.

因此,我查看了 waitpid() 的文档我看到两者之间存在差异。

waitpid()wait4() 做同样的事情, 但是 wait4() ,根据手册页,

additionally return resource usage information about the child in the structure pointed to by rusage.

两个系统调用定义如下

pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);

pid_t waitpid(pid_t pid, int *status, int options);

现在,我还读到还有另一个系统调用可以完成获取 child 的 usage 的额外工作,那就是 getrusage() .

所以,我可以理解 wait4() 可以做什么,可以通过结合使用 waitpid()getrusage( )


但是,我不明白的是,总是有充分的理由让系统调用过时。但在这种情况下,感觉功能被拆分了。

  • 如果我想结合使用 waitpid()getrusage(),我 必须检查返回值两次,而对于 wait4()
  • 另外,可以使用 wait4() 获取特定的 usage child ,但是 waitpid() 会给出所有 child 的 usage 一起(如果与 RUSAGE_CHILDREN 一起使用)。如果子进程比较少,这听起来像是额外的开销。

为什么 wait4() 过时了?这似乎让事情变得更难了。

最佳答案

这是一个标准化和历史问题。 wait4是一个4.3BSD的系统调用,但是POSIX.1保留了waitpid

关于c - 为什么 wait4() 被 waitpid() 取代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316374/

相关文章:

c - 使用静态库解析引用

C 函数未导出

linux - Debian gnome3 上的 Lato 字体渲染问题

从同步块(synchronized block)调用 wait 时出现 java.lang.IllegalMonitorStateException

c - 如何等待非子进程退出

c++ - for 每个循环读取数组都是错误的

c 编程 read() 和 write() 内容到文件

linux - JavaFXSceneBuilder1.1 未在 Ubuntu Linux 中启动

linux - 在golang中使用IP_ADD_SOURCE_MEMBERSHIP调用SetsockoptString时出错

c++ - 线程上的 'wait' 如何在 C++ 中实际工作