请分析以下程序
int main() { pid t pid; pid = fork(); if(pid==0) printf("l am the child process my process ID is %d\n", getpid()); else printf("l am the parent process my process ID is %d\n", getpid()); }
那么,该程序正确运行后的结果是
l am the child process my process lD is 3744 l am the parent process my process lD is 3987
l am the child process my process lD is 3744
l am the parent process my process lD is 3987
不输出任何信息
答案
l am the child process, my process lD is 3744 l am the parent process, my process lD is 3987
解析
该程序会在调用fork()后创建一个子进程。fork()函数返回两次:一次在父进程中,返回子进程的PID;一次在子进程中,返回0。因此,程序会在两个进程中各自执行一条printf语句。
在父进程中,fork()返回值为子进程的PID,所以pid不等于0,执行else分支的代码,打印出"我是父进程"的信息。
在子进程中,fork()返回值为0,所以pid等于0,执行if分支的代码,打印出"我是子进程"的信息。
所以,程序正确运行后的结果是:
l am the child process my process ID is 3744
l am the parent process my process ID is 3987
请注意,实际的输出可能会有所不同,取决于操作系统如何分配进程ID,以及程序在什么平台上运行。在上面的输出中,可以看到父子进程各自的输出都打印了,分别表明了它们的进程ID和它们是父进程还是子进程。