linux(十四)程序和进程的深入研究

Posted 云来云去-起飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux(十四)程序和进程的深入研究相关的知识,希望对你有一定的参考价值。

目录

 

一、程序和进程的基础知识

1.1.程序和进程的关系

1.2.进程状态

二、命令解析

     2.1.ps 命令

     2.1.1.针对查询结构进行补充

    2.2.TOP命令

2.2.1.描述

2.2.2 查询结果分析

2.2.3.top的按键命令

2.2.4.top 拓展命令

2.3.pgrep 命令

2.4.kill 命令

三、进程控制


一、程序和进程的基础知识

1.1.程序和进程的关系

  •  程序

    保存在硬盘,光盘等介质中的可执行代码和数据

    静态保存的代码

  •  进程

   在cpu及内存中运行的程序代码

   动态执行的代码

   父、子进程

   每个程序可以创建一个或者多个进程

  •   僵尸进程:占用资源,却无法正常运行工作的进程
  •   孤儿进程:无父进程

1.2.进程状态

  •    可运行状态
  •    sleep状态

           可中断sleep状态

           不可中断sleep状态

  •    僵死状态
  •     停止状态
  •     已死状态
  •     详述僵尸进程

          产生原因:子进程先于父进程退出,父进程(使用wait()系统调用)没有读取到子进程退出的返回代码,这时候子进程为了保存退出原因,因此进入僵死态不会释放所有资源。僵死进程会以终止状态                            保持在进程表中,并且会⼀直在等待父进程读取其退出状态代码。

          危害:维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,假如⼀个父进程创建了很多子进程,但是不回收,就会造成内存资源的浪费,资源泄露。

  •    详述孤儿进程:

          同僵尸进程相反,假如父进程先于子进程退出,子进程便进入后台运行,成为孤儿进程,孤儿进程随后会被1号init进程领养并回收,也就是将其父进程变为init进程。

注:cpu 同一时刻只能执行一个进程,cpu时间片是cpu在处理某个进程的运行时间

二、命令解析

     2.1.ps 命令

          ps 描述:linux系统中常用的进程查看工具,主要用于显示包含当前运行的各进度完整信息的静态快照。

          ps 选项

                                                                                                        ps 命令解析
序列命令选项描述案列
1-a所有终端下的所有信息,除了当前用户还有其他用户ps -aux | grep "zhou" 查看字样带zhou的进程
2-u使用以用户为主的格式输出进程信息,当前用户
3-x显示当前用户所有终端下的进程信息
4-e显示系统内的所有进程信息ps -elf  查看所有的进程,以长格式显示进程信息
5-f使用完整的格式显示进程信息
6-l使用长格式显示进程信息
7-o指出输出字段 
8pstree查看进程数,能更直观的判断各进程的父子关系,systemd是系统第一个进程,pid为1 其他皆为其后代。

pstree -a 显示所有

pstree -u zhou 找到zhou用户下所有进程

pstree -p 列出所有进程对应id

pstree -p zhou 列出zhou用户下进程对应id

pstree -l bash  显示bash的进程号

     2.1.1.针对查询结构进行补充

  • ps -aux

+ 为前台进程

tty1 图形化界面

tty2 命令界面

CTRL +ALT F1 图形界面,以此类推

START 进程触发时间

TIME 一共占用cpu时间

%cpu 占用率

%mem 内存占用率

command 进程: 带【】为内核态的进程 ,不带【】为用户态的进程

  • ps -elf | head

PRI 为优先级,越小越优先(不可修改)

NI   nice 可以改变优先级

以上两个组合成为进程优先级

  • ps -ef | head

注意两点:

         ps -ef 会显示PPID,0表示没有父进程

         ps e  会连环境变量都显示,如图

  • ps axo 自定义所需要的显示的参数

ps axo user,pid

   2.2.TOP命令

     2.2.1.描述

  •           使用ps命令查看到的是静态的进程信息,并不能连续的反馈当前进程的运行状态,如果希望以动态刷新的方式显示各进程的状态信息,就可以使用top命令。
  •           默认每3秒刷新一次,类似于Windows系统的任务管理器

    2.2.2 查询结果分析

  • 如图

  • 如上图所示解析:

 

       up:开启时间为4天,

       load average: cpu平均负载 00 为1min的平均 , 0.04是5min ,0.47是15min 

       5 users :5个用户数

     查看cpu方式

     grep 'model name' /proc/cpuinfo | wc -l  -----查看cpu核数

     cat /proc/loadavg   ----查看负载

     uptime ---查看负载

     w ---查看负载均衡

total:进程总数,running:正在运行的进程数,sleeping:睡眠的进程数,stopped:停止的进程数,zombie:僵尸进程数

us:用户空间占用CPU百分比

sy:内核空间占用CPU百分比

ni:用户进程空间内改变过优先级的进程占用CPU百分比

id:空闲CPU百分比

wa:等待输入输出的CPU时间百分比

hi:硬中断(Hardware IRQ)占用CPU的百分比

si:软中断(Software Interrupts)占用CPU的百分比

st:虚拟机占用百分比

       total:物理内存总量,free:空闲内存总量,used:使用的物理内存总量,buff/cache:用作内核缓存的内存量

       total:交换分区总量,free:空闲交换分区总量,used:使用的交换分区总量,avail mem可用于进程下一次分配的物理内存数量

  pid:进程id,user:用户,pr:优先级 ,ni为nice值,和pr配合调整优先级,VIRT :分配的虚拟内存大小,RES:占用物理内存大小 ,SHR:内存共享大小。

2.2.3.top的按键命令

  •  M 按内存 排序
  •  P 按CPU 排序
  •  N 按PID 排序
  •  z  变更颜色
  •  1 显示所有cpu
  •  q 突出

2.2.4.top 拓展命令

  • top -d 5 设置时间
  • top -p 进程名或者pid

2.3.pgrep 命令

  • 查看用户下的进程号

  • 查看用户下的进程号和进程名

2.4.kill 命令

  • kill -1 重启
  • kill -9 直接杀死
  • kill -15 正常停止
  • killall 通过名称去杀
  • pkill -9 进程名称 :如pkill -9 -f "ping 8.8.8.8" 
  • pkill -u 指定用户: 如pkill -u mark  
  • pkill -HUP nginx 

三、进程控制

  • vim 编辑的时候,可以在命令模式下ctrl + z 调到后台,
  • 后台启动:在命令行尾加入“&”符号
  • jobs命令:查看后台进程命令
  • fg+任务号命令,将后台命令放到前台
  • 继续放在后台运行bg +任务号
  • kill -9 %1 杀死后台任务,1表示
  • 案列如下:

以上是关于linux(十四)程序和进程的深入研究的主要内容,如果未能解决你的问题,请参考以下文章

Linux Linux程序练习十四(多进程压力测试)

深入Linux内核架构——锁与进程间通信

深入Linux内核架构——进程管理和调度(上)

第一次作业:深入源码分析理解Linux进程模型

第一次作业:深入分析Linux系统进程

第一次作业:基于linux操作系统深入源码进程模型分析