我有一个程序可以连续多次(而不是同时)执行 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 信号。令人高兴的是,wait
和 waitpid
是 async-signal-safe ,因此您可以安全地从信号处理程序调用它们,并使程序的主流程不受影响。
关于c - 多次执行fork会带来什么风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23609414/