今天看书,看到用fork创建子进程的一段样例代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
char* msg;
int k;
printf("Process Creation Study\n");
pid = fork();
switch(pid){
case 0:
msg = "Child process is running";
k = 3;
break;
case -1:
perror("Process creation failed\n");
break;
default:
msg = "Parent process is running";
k = 5;
break;
}
while(k)
{
puts(msg);
sleep(1);
printf("msg's adress is %p,k's aress is %p,k = %d,PID = %d\n",&msg,&k,k,pid);
--k;
}
return 0;
}
很多疑惑,逐一记录解决
1 为什么同一个switch会执行了两次呢?
2 Parent确实执行了5次输出,child也确实3次输出,为什么同一变量能存两个不同的值呢!?
在while中加入哪条输出变量地址和值的输出语句后表面看来确实是同一内存块存储了两个不同的值,怎么解释?
各方搜集资料调试打印之后得出结果:
首先子进程