linux进程管理

Posted Red Tat

tags:

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

linux程序与进程

程序是一组指令及参数的集合,按照指定的逻辑控制计算机运行用来完成特定任务。
进程则是运行这的程序,是操作系统执行的基本单位,是程序运行的过程,动态,有生命周期及运行状态。

  • 从用户的角度来看进程是程序的一次动态执行过程。
  • 从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。
  • 进程是资源分配的最小单位。
  • 每一个进程都有自己独立的地址空间与执行状态。
  • 像Linux这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程。
    程序和进程的区别:
  • 进程是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程。
  • 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程。
  • 进程还具有并发性和交往行,而程序却是封闭的。
    进程和线程的区别:
  • 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。
  • 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。

Linux进程基础


父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程ID(PID),满足跟踪安全性之需。PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。
父子进程的关系:子进程是由一个进程所产生的进程,产生这个子进程的进程为父进程 在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。父进程终止子进程自然终止。
子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出exit信号请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。

linux进程管理工具

pstree命令

pstree:用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚地看出来是谁创建了谁。
-A:各进程树之间链接以ASCII码字符来连接
-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
-p:同时列出每个进程的PID
-u:同时列出每个进程的所属账号名称

ps命令:
-A:所有的进程均显示出来,与-e具有同样的效用;
-a:显示现行终端机下的所有进程,包括其他用户的进程;
-u:以用户为主的进程状态;
-x:通常与a这个参数一起使用,课列出较完整信息;

  • USER:该进程属于哪个使用者账号
  • PID:该进程的进程ID号
  • %CPU:该进程使用掉的CPU资源百分比
  • %MEM:该进程所占用的物理内存百分比
  • VSZ:该进程使用掉的虚拟内存量
  • RSS:该进程占用的固定的内存量
  • TTY:该进程是在哪个终端机上边运作,若与终端机无关,则显示?。另外,tty1-6是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。
  • STAT:该程序目前的状态,主要的状态有:
  • R:该程序目前正在运行,或者是可被运作;
  • S:该程序目前正在睡眠当中,但可被某些讯号唤醒。
  • T:该程序目前正在侦测或者是停止了;
  • Z:该程序应该已经终止,但是其父程序却无法正常的终止他,造成Zombie程序的状态。
  • START:该进程被触发启动的时间
  • TIME:该进程实际使用CPU运作的时间
  • COMMAND:该程序的实际指令

pgrep命令

pgrep:经常要查看进程的信息,包括进程的是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。pgrep通过匹配其程序名,找到匹配的进程。
-l:同时显示进程名和PID
-o:当匹配多个进程时,显示进程号最小的那个
-n:当匹配多个进程时,显示进程号最大的那个
注:进程号越大,并不一定意味着进程的启动时间就越晚

killall,kill

linux中killall命令用于杀死指定名字的进程。kill用来杀死指定进程的PID的进程。
杀死所有同名进程:
killall命令:
-Z:只杀死拥有scontest的进程
-e:要求匹配进程的名称
-g:杀死进程组而不是进程
killall nginx
killall -9 bash
kill命令:
-p 指定kill命令只打印相关进程的进程号,而不发送任何信号。
-s:指定发送信号。
-u:指定用户。
-l:列出所有信号名称。

说明:

  • 1 终端断线
  • 2 中断(同ctrl+c)
  • 3 退出(同ctrl+\\)
  • 15 终止
  • 9 强制终止

htop

监控软件Htop,称之为top的增强版,相比top有着很多自身的优势:

  • 两者相比起来,top比较繁琐
  • 默认支持图形界面的鼠标操作
  • 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行
  • 杀进程时不需要输入进程号等

    再图中界面划分了四个区域,其中:
    左上区域:显示了CPU,物理内存和交换分区的信息;
    右上区域:显示了任务数量,平均负载量和连接运行时间等信息;
    进程区域:显示出当前系统中的所有进程,这里同top显示一致。
    提示区域:也就是最后一行,会有f1-f10的用法说明。

vmstat命令

vmstat命令是最常见的linux/unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,io读写情况。
用法:vmstat [-V] [-n] [-S unit] [delay[count]]

上图中vmstat 2 6 2代表每两秒采集一次 6代表采集次数。

以上是关于linux进程管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

Linux性能及调优指南(翻译)之Linux进程管理

linux进程管理

Linux进程管理专题

linux进程管理

Linux 进程管理 进程优先级管理