C - 从单亲 fork

标签 c process fork parent-child

我正在尝试编写一个小程序,从单个父进程中 fork 进程。目前,我的代码执行了几次此操作,但随后子进程创建了更多子进程,我想消除这些子进程。

int main() {
    pid_t c;

    for (int i = 0; i < 5; i++) { 
        c = fork(); 

        if(c < 0) { 
            perror("fork");
            exit(1);
        }
        else if( c > 0 ) { 
            printf("parentID = %d, childID = %d\n", getppid(i), getpid(i)); 
        }
    }
}

我不知道如何修改它,以便 fork 仅从父级 fork 。

编辑:感谢您的帮助,找到解决方案:

int main() {
    pid_t c;

    for (int i = 0; i < 5; i++) { 
        c = fork(); 

        if(c < 0) { 
            perror("fork");
            exit(1);
        }
        else if( c > 0 ) { 
            printf("parentID = %d, childID = %d\n", getppid(i), getpid(i)); 
        }

        else {
            exit(0); 
        } 
    } 
}

最佳答案

发布的代码中没有任何内容可以识别子进程(0 == pid)

因此, child 会点击(并跳过)两个“if”语句。

到达循环末尾,

分支回到循环顶部,调用 fork().... 等。

建议:添加

elseif( 0 == pid ) 
{ // then child ...   
    exit( EXIT_SUCCESS );
}

关于C - 从单亲 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33572143/

相关文章:

c - Sizeof 不返回 C 中变量的真实大小

c - FUSE开放系统调用机制

java - 从 Java 和 Process 的 "destroy"方法运行 exe

java - 子进程继承了什么?

unix - dup2 和 fork 怎么一起用​​?

无法通过使用 Pthreads 并行化 Quicksort 获得任何加速

c++ - glibc 在转换类型 C++ 后检测到 free() 无效的下一个大小(快速)

c# - 如何判断是否触发了进程强制关闭(WaitForExit)?

c - 从 C 中的子进程获取父进程的 id

c - 当我用 fork 运行两个进程时出现段错误