linux进程

查看(显示)进程 ps
ps 显示当前目录下的进程
ps aux :显示所有进程
ps aux | less (less可以打开文件 | 管道符将第一个命令的输出当作第二个命令的操作对象)
ps aux | grep 进程名给或者PID码

bash: 在这里插入图片描述

显示当前只有两个进程

ps aux |grep test在这里插入图片描述
我们发现指令也属于进程 ,共有两个进程

现在在代码中加上 sleep在这里插入图片描述

我们发现 加了 sleep 基本不占空间

内核: 内核管理 cpu 的资源(时间 ,内存)

进程描述 PCB(process control blocks)

linux 进程放在一个 PCB上 ,PCB 实质是一个task_struct 的很大的结构体

1块cpu 只能给1个进程

PCB 中包含很多信息
1 必须有 PID(进程的唯一标识符)(父进程PPID)
2 内存指针 : 存放数据的地址
3进程状态:  R(Ready就绪状态): 进程在就绪队列中 就处于R状态
        S  睡眠状态   :
      D 深度睡眠状态(密集进行io操作时)eg: coreDump写遗言时
      T 暂停(ctrl + z 放到后台,同时进程会暂停)
      t trace 跟踪
      X 进程已经结束(进程下是看不到的,在源码中才能看到)
      Z “僵尸进程 ”
僵尸进程的形成:   
  父子进程有关
  什么是父子进程: 一个进程还可以再创建一个进程,称为父子进程。fork()函数创建子进程
  getpid() gitppid();记得sleep(1)再观察
  独立进程思维思考::
fork()一次执行,返回两个值。(突破认知了吧):因为是两个进程 ,每个进程完成自己的工作。
  在这里插入图片描述
  fork : 创建子进程
  一次调用 ,两个返回值。
  代码共享,每个进程数据单独具有一份空间,采用写时拷贝

 
我们经常需要fork的执行不同的进程 ;
借用fork()返回值区分,int ret=fork();

if(ret>0) 父进程
else if(ret==0)子进程
else 创建失败 (ret<0);
失败的情况 (通过man 手册 下图查看 ):1 内存不够 2 进程太多 等等

父子进程紧接着fork()函数执行,并不是从开一份main() 函数,执行顺序取决于操作系统的调度

在这里插入图片描述在这里插入图片描述
回头接著看我们的 ” 僵尸进程 “
1 形成 : 父进程结束后 没有 回收子进程的资源
2 怎么清除僵尸进程?
1 kill 指令 杀死父进程 (kill 父进程 不太科学,因为你可能还需要用父进程)
2 进程等待方法(比较科学);
危害 : 内存泄漏
为什么kill 掉父进程,僵尸进程就没了?
因为kill掉父进程之后,子进程就成了孤儿进程 ,这时候孤儿进程就被1号进程收养,从而释放资源。
注意 : 孤儿进程并不是僵尸进程,没有直接关系 !
僵尸进程 处于 Z 状态 。


进程的调度
并行 : 多个cpu同时各自执行一个进程
并发:一个cpu分别执行很多个进程,可以认为同时执行很多进程(其实时间特别短,我们感受不到)
调度: 少量的块数的CPU满足大量进程同时执行。

组织进程: 双向链表进行组织,每个节点就是一个 task_struct

来看看 下面的代码,为了查看它的执行时确实是一个进程 ,我专门写了一个死循环
接着 ps aux | grep test 查看后台进程 发现确实有它,我在代码中加上了sleep(1) ;这样进程就不会产生该事件占用CPU 我们童话故事看到 状态栏显示为 S+(sleep状态) 。因为 sleep函数不占用内存

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

屏蔽掉sleep()函数;我们再看看

在这里插入图片描述
很明显! S+ 状态不在是0.00了 变成了13.3 ,因为我暂停的缘故这个值比较小(上图上半截不要考虑,我执行时多执行了一步)

看下边父子进程的代码 和执行

在这里插入图片描述
注意看代码 ,我们printf();只打印一个,可一直却打印两个PID?为什么 。这就是 父子进程的缘故! 那么 哪个 父进程呢 ? 哪个是子进程? 多打印一个ppid来得到父进程。
注意 比对 ,我们不难发现多了一项PID
在这里插入图片描述
看到没 ,还是两行打印 ,每行后边是他的 父进程PID,验证一下就可以找到父进程了

这时候 杀死 父进程在这里插入图片描述
没了17861吧 (不科学手段哦!)推进使用 进程等待 方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值