C 将进程设置为

C 将进程设置为,c,fork,C,Fork,我有这个功能: void set_background(int n){ int i; for(i=0;i<n;i++) fork(); } void set\u背景(int n){ int i; 对于(i=0;i您需要监视fork()的返回值 void set\u背景(int n) { 对于(int i=0;i

我有这个功能:

 void set_background(int n){
       int i;
       for(i=0;i<n;i++)
          fork();
  }
void set\u背景(int n){
int i;

对于(i=0;i您需要监视
fork()
的返回值

void set\u背景(int n)
{
对于(int i=0;i
如果您确保“幼稚”的处理永远不会返回,那么您就简化了控制流程。我通过
exit(exit_FAILURE);
调用强制实现了这一点


请注意,在原始代码中,父进程在循环的第一次迭代中分叉,因此在循环结束时有两个进程运行。在第二次迭代后,父进程和子进程分叉,因此有4个进程运行。在第n次迭代后,有2N个进程运行。这很少达到预期效果这一版本被称为“叉形炸弹”,它能够使机器屈服。

您需要监控来自
fork()
的返回值

void set\u背景(int n)
{
对于(int i=0;i
如果您确保“幼稚”的处理永远不会返回,那么您就简化了控制流程。我通过
exit(exit_FAILURE);
调用强制实现了这一点


请注意,在原始代码中,父进程在循环的第一次迭代中分叉,因此在循环结束时有两个进程运行。在第二次迭代后,父进程和子进程分叉,因此有4个进程运行。在第n次迭代后,有2N个进程运行。这很少达到预期效果这个循环版本被称为“fork bomb”,它能够让机器屈服。

你想像父母一样继续循环吗?让我想起
fork()
bomb你想像父母一样继续循环吗?让我想起
fork()
bomb出于好奇,为什么
EXIT\u FAILURE
而不是
EXIT\u SUCCESS
?@DanielFischer:因为我定义了“做幼稚的事情”不应该返回;我通常调用一个我称之为
be\u childish()的函数
在代码中的该点,如果返回,则是一个错误。但是,也可以确定
be_childish()
代码可以返回,然后退出(exit_SUCCESS);
可以。有时,父代码调用
be_parent()
。出于好奇,为什么
EXIT\u FAILURE
而不是
EXIT\u SUCCESS
?@DanielFischer:因为我定义了“做幼稚的事情”不应该返回;我通常调用一个我称之为
be\u childish()的函数
在代码中的该点,如果返回,则是一个错误。但是,也可以确定
be_childish()
代码可以返回,然后退出(exit_SUCCESS);
可以。有时,父代码调用
be_parent()
void set_background(int n)
{
    for (int i = 0; i < n; i++)
    {
         pid_t pid;
         if ((pid = fork()) < 0)
             ...process error...
         else if (pid == 0)
         {
             ...do childish things...
             exit(EXIT_FAILURE);
         }
    }
    /* If here, must be parent */
}