首先这是一个验证孤儿程序
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
int main(int argc,char *argv[])
{
pid_t pid;
pid=fork();
switch(pid)
{
case 0:
while (1)
{
printf("子进程 background process,PID:%d parent PID:%d\n",getpid(),getppid());
sleep(3);
}
case -1:
printf("fail\n");
exit(-1);
default:
printf("父进程 parent process,parent PID :%d\n",getpid());
exit(0);
}
return 0;
}
<1>验证所有进程都享有同等执行权
这是运行这个程序得到的两次不同的结果
父进程 parent process,parent PID :7039
子进程 background process,PID:7040 parent PID:7039
liangmengdi@liangmengdi:~/cx$ 子进程 background process,PID:7040 parent PID:1111
子进程 background process,PID:7040 parent PID:1111
子进程 background process,PID:7040 parent PID:1111
子进程 background process,PID:7040 parent PID:1111
子进程 background process,PID:7040 parent PID:1111
子进程 background process,PID:7040 parent PID:1111
父进程 parent process,parent PID :7104
子进程 background process,PID:7105 parent PID:1111
liangmengdi@liangmengdi:~/cx$ 子进程 background process,PID:7105 parent PID:1111
子进程 background process,PID:7105 parent PID:1111
子进程 background process,PID:7105 parent PID:1111
子进程 background process,PID:7105 parent PID:1111
子进程 background process,PID:7105 parent PID:1111
运行的时候子进程第一次输出信息时,父进程的ID一次和上一条父进程ID一样,一次不一样,
这也就证明了父子进程是交替执行的,操作系统一般让所有进程都享有同等执行权。
出现不一样的原因也就是在default中,父进程只执行了第一条printf语句,还未执行到exit(0),其子进程就开始运行。
<2> sleep()函数
功能:另函数挂起一段时间。
一开始看书上的程序的时候,总会忽略这个函数,认为父子进程每次交替运行时是自动抢占cpu。可在运行程序时,若去掉sleep(),则父子进程并不会交替输出。至此才了解sleep()的真正作用,sleep()另一进程先暂停执行,在暂停的时间里,父子进程竞争cpu。