C 跟踪进程的执行

C 跟踪进程的执行,c,process,fork,creation,C,Process,Fork,Creation,我有以下代码可以获取其进程ID和父进程: #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main(){ int pid; printf("I am the original process with PID %d and PPID %d. \n", getpid(), getppid()); pid = fork(); if (pid >0){ printf

我有以下代码可以获取其进程ID和父进程:

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

int main(){
int pid;
printf("I am the original process with PID %d and PPID %d. \n", getpid(), getppid());
pid = fork();

if (pid >0){
    printf("I am the original process with PID %d and PPID %d \n", getpid(), getppid());
    printf("My child’s pid is %d \n" , pid);
}
else if(pid == 0) {
    printf ("I am the original process with PID %d and PPID %d \n", getpid(), getppid());
}
else if (pid == 1){
    printf ("Error – no child process was created \n");
}else{
    printf ("Error – system error \n");
}
    printf (" PID %d terminates \n", getpid()); /* both processes execute this instruction */

return 0;
}
有几个问题使我困惑。。 这段代码是如何执行的? 在输出中,您可以看到它在
if(pid==0)
下运行代码,而条件
if(pid>0)
已经执行。为什么pid等于0?而它已设置为大于0。 最后,
fork()。因此,父级和子级执行代码。父项的pid大于0,子项的pid==0

因此,从fork命令开始,父级和子级在类似的时间执行。让我们从家长开始。父级检查第一条语句(pid>0)并发现它是真的,所以它会打印出这两条语句。然后在最后一个else之后一直到print语句

现在是孩子。子项检查第一个if语句,结果为false。检查下一个(pid==0)并发现它为真。现在它要打印出那份声明。现在,它将在else之后跳到print语句并再次打印

注意:父级和子级可以在不同的时间执行,因此如果多次运行代码,则输出的顺序可能不同

fork()生成多个进程或“子进程”。因此,父级和子级执行代码。父项的pid大于0,子项的pid==0

因此,从fork命令开始,父级和子级在类似的时间执行。让我们从家长开始。父级检查第一条语句(pid>0)并发现它是真的,所以它会打印出这两条语句。然后在最后一个else之后一直到print语句

现在是孩子。子项检查第一个if语句,结果为false。检查下一个(pid==0)并发现它为真。现在它要打印出那份声明。现在,它将在else之后跳到print语句并再次打印


注意:父级和子级可以在不同的时间执行,因此如果多次运行代码,则输出的顺序可能不同

您应该将第四个
printf
更改为“我是子进程”,您应该将第四个
printf
更改为我现在看到的“我是子进程”。。调用fork后创建了两个进程。谢谢..我现在明白了。。调用fork后创建了两个进程。谢谢
I am the original process with PID 1009 and PPID 964. 
I am the original process with PID 1009 and PPID 964 
My child’s pid is 1010 
 PID 1009 terminates 
I am the original process with PID 1010 and PPID 1009 
 PID 1010 terminates