c - 多次执行fork会带来什么风险?

标签 c linux fork

我有一个程序可以连续多次(而不是同时)执行 fork。

此类行为可能存在哪些风险。

因为有时候执行fork多次后会出现fork错误

最佳答案

The Open Group Base Specifications Issue 7, IEEE Std 1003.1, 2013 Edition ,非常清楚地描述了可能发生的情况:

The fork() function shall fail if:

[EAGAIN] The system lacked the necessary resources to create another process, or the system-imposed limit on the total number of processes under execution system-wide or by a single user {CHILD_MAX} would be exceeded.

The fork() function may fail if:

[ENOMEM] Insufficient storage space is available.

您可能会抗议您的子进程不是长时间运行的,并且不应该同时有太多事件进程。在这种情况下,问题可能是您的父进程因无法调用 wait 而离开“僵尸进程”(那些已终止但仍占用进程表中的槽的进程)。清理它的 child 之后。您可以同步调用 wait,从某种意义上说,父进程除了等待子进程执行和终止之外没有什么更好的事情可做,或者您可以调用 wait 作为响应到 SIGCHLD 信号。令人高兴的是,waitwaitpidasync-signal-safe ,因此您可以安全地从信号处理程序调用它们,并使程序的主流程不受影响。

关于c - 多次执行fork会带来什么风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23609414/

相关文章:

c - 如何创建一个文本文件,在给定路径中该文件不存在

c - fgets malloc c 帮助

c - 在 C 中使用超出其范围的自动变量

linux - 在 Windows 上的 Ubuntu 上从 Bash 打开 Sublime Text

c - 为什么 scanf 函数不接受转义序列作为输入?

c - 如何在c中处理tcpdump输出

c - golang os *File.Readdir 在所有文件上使用 lstat。可以优化吗?

java - fork /加入 : Collecting results

c++ - lldb/gdb 有什么问题,忽略 OS X 中的第一个 sleep() 语句?

c - 在继续之前等待 fork children 写入管道