我正在尝试使用C语言中的fork()
函数在Linux系统中处理多个进程,以下是我的代码:
p1 = fork();
if(p1 != 0){
p2 = fork();
}
printf("My PID is %d\n",getpid());
printf("My parent PID is %d\n",getppid());
现在假设父进程的ID是100,两个子进程(p1、p2)的ID分别为101和102,init进程的PID将为0,我的期望输出是:
My PID is 100
My parent PID is 0
My PID is 101
My parent PID is 100
My PID is 102
My parent PID is 100
相反,我看到了不同的东西,两个子进程具有相同的 PPID,但第一个进程的 PID 与其不同。以下是我得到的示例输出:
My PID is 3383
My parent PID is 3381
My PID is 3387
My parent PID is 1508
My PID is 3386
My parent PID is 1508
我的问题是,这两个子进程的父 PID 不应该是 3383 吗?希望有人能解释一下这里的所有工作原理以及我在做什么(或者想错了什么)。
printf
完成后添加一个sleep
会发生什么? - Mohit Jainprintf
之后睡眠应该不会改变任何东西,因为进程将被创建并且fork
一样... - argamanza