我正在浏览系统调用的文档 wait4()
在它的手册页中写着
These functions are obsolete; use
waitpid(2)
orwaitid(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/