进程的了解与僵尸进程的实现

戏子无情 提交于 2019-12-21 00:17:37

进程概念:程序的一个执行实例,正在执行的程序等

内核观念:担当分配系统资源(CPU时间,内训存)的实体

查看进程:

  进程存放在根目录下的proc文件中,可以通过/proc系统文件查看:

    使用ps aux | grep test 

  通过系统调用创建进程—fork(在创建子进程的时候其实是复制了task_struct)

  fork有两个返回值:返回值为大于0为:父进程  返回值等于0:子进程  返回值等于-1:创建失败

  fork创建出来的父子进程代码共享,但数据独有(数据各自开辟空间,私有一份)

  

进程状态:

  R:运行状态(并不意味着进程一定在运行,表示在队列中或者运行中)

  S:睡眠状态(意味着进程在等待事件的完成,也叫可中断状态)

  T:停止状态(可以通过发送信号SIGSTOP信号给进程来停止进程,也可以通过信号继续)

  X:死亡状态(只是一个返回状态,你不会在列表中看到这个状态)

  Z:僵尸状态(当进程退出并且父进程没有读取到子进程的退出返回代码时就会产生僵尸进程)

实现僵尸进程:

  代码如下,我们将子进程睡10 秒后退出,然后查看进程的状态

  

       

  在复制一个SSH渠道,在页面中输入ps aux | head -n 1 && ps aux | grep fork 用来查看进程的状态

       

       

  在运行了10 秒后,子进程退出,则进入僵尸状态

       

   僵尸进程的危害:

    1.在维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在tsak_struct(PCB)中,换句话说如果Z状态一直不退出,PCB就要一直对进程进行维护

    2.而创建了子进程却不回收,则会由大量的内存资源浪费,存在内存泄露问题

进程优先级:

  概念:

    cpu资源分配的先后顺序,就是指进程的优先权(priority)。

    优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。

    还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整 体性能

  命令:ps -l  查看进程的优先级

  其中PRI表示优先级:默认为80

  UID : 代表执行者的身份

  PID : 代表这个进程的代号

  PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号

  PRI :代表这个进程可被执行的优先级,其值越小越早被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice

  NI :代表这个进程的nice值 (范围:-20 ——19)nice的值只会影响到进程的优先级变化,并不是优先级 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!