fork(),子进程不转储核心,父进程做得很好

时间:2018-07-31 10:26:00

标签: c fork

“ ulimit -c无限制”已完成。这是代码:

main()
{
        do
        {
            pid_t pid = fork();
            int stat_loc;
            if(pid < 0)
                exit(1);
            else if(pid > 0)
            {
                waitpid(pid, &stat_loc, 0);
                sleep(5);
            }
            else
                break;
        }
        while(1);

        assert(0);
}

如果我用assert(0)代替sleep(5),父进程将转储核心。

1 个答案:

答案 0 :(得分:0)

在应用程序should cause an abort的调试版本上调用assert(0):

  

如果此函数形式的宏的参数表达式比较等于零(即表达式为false),则会将一条消息写入标准错误设备并调用中止,从而终止程序执行。

您实际上想在这里做什么?您的派生逻辑似乎有问题。通常,您进行测试以查看pid == 0是否在子进程中,而pid> 0以查看是否在父进程中,like this

pid_t pid = fork();
if (pid == 0) {
    // child process because return value zero
    printf("Hello from Child!\n");
} else if (pid > 0) {
    // parent process because return value non-zero.
    printf("Hello from Parent!\n");
} else {
    printf("Error occurred.\n");
}

在您要查询的问题中,您要检查> 0和<0。

编辑:添加了错误检查分支。