进程

首先这是一个验证孤儿程序

#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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值