C语言 是否可以终止父进程而不执行子进程?

wqsoz72f  于 2023-03-17  发布在  其他
关注(0)|答案(2)|浏览(196)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    //fork();
    //printf("Hello World\n");
    int i=fork();
        // child process because return value zero
    if (i == 0)
        printf("Hello from Child! %d \n",i);
 
    // parent process because return value non-zero.
    if (i!=0)
        printf("Hello from Parent! %d \n",i);

    return 0;
}

当fork()创建两个进程时,为什么第一个输出给出两个打印输出,而其他输出只给出来自Parent Only的输出。
我期待两个输出打印在每个输出的情况下,因为存在两个进程。
谁能解释一下为什么?
产出1:

Hello from Parent! 600 
Hello from Child! 0

产出2:

Hello from Parent! 8206

产出3:

Hello from Parent! 350

产出4:

Hello from Parent! 1098

为什么当fork()创建两个进程时,第一个输出给出两个打印输出,而其他的只给出来自父进程的单个输出。我期待在输出情况下有两个输出打印。

8ftvxx2r

8ftvxx2r1#

请确保子进程已成功终止。您可以运行其他代码以确保子进程在父进程之前终止。

int pid = fork();
//...............
kill(pid, SIGKILL);

编辑:请参阅此答案:How to kill child of fork?

suzh9iv8

suzh9iv82#

给定这个代码

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    //fork();
    //printf("Hello World\n");
    int i=fork();
        // child process because return value zero
    if (i == 0)
        printf("Hello from Child! %d \n",i);
 
    // parent process because return value non-zero.
    if (i!=0)
        printf("Hello from Parent! %d \n",i);

    return 0;
}

如果fork()发生故障,它将生成您所看到的输出。
此代码将告诉您 * 为什么 * fork()失败:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    //fork();
    //printf("Hello World\n");
    pid_t i=fork();
    if (i < 0)
        perror( "fork() failed" );
        // child process because return value zero
    if (i == 0)
        printf("Hello from Child! %d \n",( int ) i);
 
    // parent process because return value non-zero.
    if (i!=0)
        printf("Hello from Parent! %d \n", ( int ) i);

    return 0;
}

另外,注意fork()返回pid_t,而不是int,它们不必相同。

相关问题