我对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相关的值。
答案 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
}