linux 进程状态和进程创建

进程回顾

《进程》

上一次讲了进程的 并发和并行区别 并且举列说明了 
1 并发 强调是的 同个时间段 发生了 不同事件 因为cpu 读取太快了 所以我们看到以为是同时发生的 其实不是 
2 并 行 强调  同个时间点 不同事件发生 互不影响。 
我们 继续往下学

一 进程状态

在这里插入图片描述

1 挂起 和终止态

挂起 理解为关机, 终止就就是 xxx 了(芭比q了), 初始就是开始状态。
1 运行态 睡眠后就是挂起   
2 终止得到执行资格 就是xxx了

2 就绪态 和运行态

在这里插入图片描述

1 就绪就是准备的意思 
2 cpu 都会有 选择 进程 的 资格
3  只有 cpu有执行的权利 
4 进程只有 被选择 的资格 
5 每次进程 结束, cpu的选择都会发生改变 
6 cpu 是主动的 进程是被动的 等待被选中。

二 进程创建

在这里插入图片描述

1 fork 函数

在这里插入图片描述

当我们调用了frok 函数之后 父进程会克隆出 一个子进程
先直接上代码 
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>

int  main(int argc,char *argv[])
{
   
    pid_t t;
    
    t=fork();
    
    if(t>0)//大于O 父进程 
    {
        printf("father pid is %d\n",getpid());
    }
   else if(t==0)//等于0 子进程 
   {
       printf("father pid is %d ppid is %d \n",getpid(),getppid());
        
   }
   return 0;

}

子进程打印 当前pid 和它的父进程 pid 
父进程打印 当前pid  

在这里插入图片描述

为什么 有些 正常按顺序  有些却不是 

1 因为 main 也是一个进程  shell命令行也是一个进程 
2 main  shell有时候会和父进制和子进程抢占资源 
所以才会导致这种现象出现 
3 有时候看到并不是 父进程 先打印的而是子进程 先打印的 
还是并发原理 因为cpu读取太快了 所以看到可能并不是你想的

2 父进程和子进程执行的时间段

在这里插入图片描述

在调用 fork 函数之后
1 fork 会克隆出子进程 
2 并且会拷贝出一块属于子进程的区域 
3 fork 之后 父进程停止执行
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>

int  main(int argc,char *argv[])
{
   
    pid_t t;
   
    int i;
    
    for(i=0;i<3;i++)
    {
        printf("*********i=%d\n",i);
    }
         
    t=fork();
    
    if(t>0)
    {
        printf("father pid is %d\n",getpid());
    }
   else if(t==0)
   {
       printf("father pid is %d ppid is %d \n",getpid(),getppid());
        
   }
   
     for(i=0;i<4;i++)
    {
        printf("i=%d\n",i);
    }
     
   return 0;

}

前后加了for 循环 打印不同内容 证明一下 

现象 1
在这里插入图片描述
现象 2

在这里插入图片描述
出现 现象 1 现象2 原因

为什么第一个for 每次只跑一次  ????
为什么父进程也打印对应的后面的for循环了????

1 父进程是从 main开始执行的 到了fork 就停止了 
2 子进程执行之后就会打印后面的forif里面内容
3 子进程会抢占父进程资源  所以假象认为是父进程执行了 
 其实是子进程在跑父进程的内容 并且输出了 
2 3 就会导致 打印了两次 后面的 for 循环内容 

先讲这么多 大家要稳住呀。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值