cout << fork()是否准确地调用fork()?

时间:2018-12-10 20:40:23

标签: c++ linux fork pid

我对fork函数有问题。是

cout << fork();

准确调用fork()吗? 我正在尝试制作进程树,但仍然不知道如何管理fork()函数。 我写了简单的代码来说明它,但是它什么也没解释。

int mainPID = getpid();
cout << "Main process: " << mainPID << endl << endl;

cout << fork() << endl;
cout << getpid() << endl;
cout << getppid() << endl;

它返回: 118, 119, 120 程序结束并在屏幕0、118、1上获得另一个值 cout << fork()巧妙地执行fork()吗? 我以为我只得到与mainPID相关的值。

2 个答案:

答案 0 :(得分:3)

typedef struct _KEY_HANDLE { ULONG handle; void *ptr; } KEY_HANDLE; ... // difference if any between these three volatile KEY_HANDLE * key_handles = NULL; KEY_HANDLE volatile * key_handles = NULL; KEY_HANDLE * volatile key_handles = NULL; ... key_handles = (PVOID) malloc(bufsz); ... 返回两次:一次在原始父进程中,一次也在子进程中。在父进程中,它返回子进程的PID。在子进程中,它返回fork()

在这两个过程中,返回值都用0打印。这样您将获得多个输出。

如果父进程快速完成,它将在子进程调用cout <<之前退出。然后,子进程将由getppid()进程继承,该进程是PID init。因此,孩子到达1时会打印1

答案 1 :(得分:0)

0从带有cout << fork() << endl;的子进程返回值

118来自子pid cout << getpid() << endl;

1来自父ID cout << getppid() << endl;,因为真正的父已经退出,因此您的子进程已被放弃,因此它接受pid = 1的init作为新父。

我建议更改一些代码以清楚地拆分子进程和父进程,例如

if ((pid = fork()) == -1) return -1;

if (pid == 0) 
    {
    //source for child process
    }else{
    //source for parent process
    }