繁体   English   中英

跟踪流程的执行

[英]Tracing the execution of a process

我有此代码获取其进程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;
}

输出值

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 

几个让我困惑的问题..该代码如何执行? 在输出中,您可以看到它已经在条件if(pid > 0)已执行的情况下在if(pid == 0)下运行代码。 pid为何等于0? 当它已经设置为大于0时。最后, fork()真正做什么?

fork()进行多个进程或“子级”。 因此,父母和孩子执行代码。 父母的pid> 0,孩子的pid == 0。

因此,父级和子级从fork命令开始在相似的时间执行。 因此,让我们从父母开始。 父级检查第一个语句(pid> 0)并发现它是正确的,因此它打印出两个语句。 然后,它一直排到最后一个语句之后的print语句。

现在给孩子。 子级检查第一个if语句,并且为false。 检查下一个(pid == 0)并发现它为true。 因此,现在它将打印出该语句。 现在,它将在else后面跳到print语句并再次打印。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM