Linux进程与作业管理(一)

一、Linux进程概念

1.进程:Process,是运行中的程序的一个副本,有生命周期,都由其父进程创建

Linux内核存储进程信息的固定格式:taskstruct

多个任务的的taskstruct组件的链表:task list

2.进程优先级:0-139

0:一般不使用

1-99:实时优先级;数字越大优先级越高,系统自动安排

100-139:静态优先级;数字越小优先级越高,可手动更改

3.Nice值:-20至19,对应于100到139

普通用户只能将自己的优先级调低,root用户可以随意调制

每个队列有两对:运行队列、过期队列,140对280队,通过CPU中断控制来给进程运行时间

4.进程内存

内存是以Page Frame:页框的方式存储页面数据

每个内存页框的MMU(Memory Management Unit,内存管理单元)的大小一般为4k

进程在内存上的存储单元可能是不连续的

5.IPC:Inter Process Communication进程间通信

同一主机上:signal信号、shm: shared memory共享内存、semerphor旗语手势

不同主机上:rpc: remote procecure call远程过程调用、socket套接字

6.进程类型

守护进程:在系统引导过程中启动的进程,跟终端无关的进程;

前台(用户)进程:跟终端相关,通过终端启动的进程

注意:也可把在前台启动的进程送往后台,以守护模式运行;

7.进程状态

运行态:running,进程占用CPU,并在CPU上运行;

就绪态:ready,进程已经具备运行条件,但是CPU还没有分配过来;

可中断睡眠态:处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。这些进程的task_struct结构被放入对应事件的等待队列中。当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。

不可中断睡眠:进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。但是有延迟

可中断:interruptable

不可中断:uninterruptable,不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。

停止态:暂停于内存中,但不会被调度,除非手动启动之;stopped

僵死态:zombie,结束进程,父进程结束前,子进程不关,不可被kill, 即不响应任务信号, 无法用SIGKILL杀死

8.进程的分类

CPU-Bound:cpu密集型,对CPU占用大,非交互式的占用大

IO-Bound:io密集型,对io占用大,交互式的占用大

9.进程的数字标识16bits:

0-65535:有效使用1-65535

1-1023:固定分配,服务器使用,而且只有管理员有权限启用;

1024-4W:半固定,服务,如mysql等

4W+:临时;标识临时通信进程

10.CentOS 5/6/7的启动进程

CentOS 5: SysV init,在系统启动和创建进程借助脚本,串行启动,速度慢

CentOS 6:upstart,在5的基础上升级,同为脚本启动,但时可以支持并行启动

CentOS 7:systemd,并行,以systemd为单一进程同时启动其他进程

二、进程管理相关命令

1.pstree:进程树查看

常用选项:

-p:打印个进程的pid

实例:

[[email protected] ~]# pstree -p
systemd(1)─┬─abrt-watch-log(791)
           ├─abrt-watch-log(799)
           ├─abrtd(788)
           ├─alsactl(785)
           ├─at-spi-bus-laun(88842)─┬─dbus-daemon(88859)
           │                        ├─{at-spi-bus-laun}(88846)
           │                        ├─{at-spi-bus-laun}(88852)
           │                        └─{at-spi-bus-laun}(88865)
           ├─at-spi2-registr(88871)───{at-spi2-registr}(88873)
            ...

2.ps:process state,查看当前进程状态

Linux各进程的相关信息在/proc目录有一个以其PID命令的目录下的众多文件中.

常用选项:

a:所有与终端相关的进程;

x:所有与终端无关的进程;

u:以用户为中心组织进程状态信息显示

-e:显示所有进程

-f:显示完整格式的进程信息

-F:显示完整格式的进程信息;

-H:以层级(树状)结构显示进程的相关信息;

o  field1, field2,...:自定义要显示的字段列表,以逗号分隔;

实例:

1) # ps aux:显示所有与终端有无关联的进程信息,一用户为中心组织状态信息显示

[[email protected] ~]# ps aux | head -5
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.2 128892  8792 ?        Ss   Feb06   3:34 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2  0.0  0.0      0     0 ?        S    Feb06   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    Feb06   0:14 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    Feb06   0:00 [migration/0]

说明:

USER:运行该进程的用户

PID:进程的ID号码

%CPU:CPU的占用百分比

%MEM:内存空间占用比率,占用整个内存空间的比例

VSZ(Virutal memory SiZe):虚拟内存集;占用的虚拟内存大小,真正用来占用的内存

每个内存占用的内存有两种:线性内存空间、物理内存空间

  • 线性内存:会映射到物理内存,在线性内存空间角度看是连续的内存占用
  • 物理内存:实际上是以内存页框保存,可能一个进程占用的不连续的页框

RSS:ResidentSize,常驻内存集;坚决不能转换到swap中内存集

TTY:运行终端

STAT:当前进程的运行状态,BSD样式

  • R:running,运行态
  • S:interruptable sleeping,可中断睡眠
  • D:uninterruptable sleeping,不可中断睡眠
  • T:Stopped,停止状态
  • Z:zombie,僵死状态,进程结束后,在被回收之前状态
  • +:表示一个前台进程,占据命令提示符
  • l:多线程进程
  • N:低优先级进程
  • <:高优先级进程
  • s:session leader ,回话主导进程,如shell,其主导其下的进程

START:进程开始时间

TIME:累计运行CPU时间

COMMAND:使用进程、线程,[]: 内核线程

2) # ps -ef:以完整格式显示所有的进程信息

[[email protected] ~]# ps -ef|head -5
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 Feb06 ?        00:03:35 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2      0  0 Feb06 ?        00:00:00 [kthreadd]
root          3      2  0 Feb06 ?        00:00:14 [ksoftirqd/0]
root          7      2  0 Feb06 ?        00:00:00 [migration/0]

说明:

  • UID:启动进程用户
  • PID:运行进程号
  • PPID:父进程的进程号,0在内核启动init之前存在,init启动后终止,存在过渡,一般为swap的进程
  • C:cpu utilization,CPU的占用百分比
  • STIME:启动时间
  • TTY:与其终端相关
  • TIME:累计运行CPU时间
  • CMD:启动此进程的命令

3) # ps -eFH:树状层级结构显示

F比f显示的信息更加全面,层级结构显示,缩进相同同层级

PSR:运行在哪颗CPU上,十进制编号,0/1/2/3

[[email protected] ~]# ps -eFH|head -5
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          2      0  0     0     0   0 Feb06 ?        00:00:00 [kthreadd]
root          3      2  0     0     0   0 Feb06 ?        00:00:14   [ksoftirqd/0]
root          7      2  0     0     0   0 Feb06 ?        00:00:00   [migration/0]
root          8      2  0     0     0   0 Feb06 ?        00:00:00   [rcu_bh]

4) # ps -eo , #ps axo显示自定义字段列表

o field1, field2,...:自定义要显示的字段列表,以逗号分隔,o要写在后面,因为要带参数

常用的field:pid,ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio

  • ni:nice值;
  • priority:priority,优先级;
  • rtprio:realtime priority,实时优先级;
    [[email protected] ~]# ps axo pid,ni,pri,psr|head -5
     PID  NI PRI PSR
     1   0  19   0
     2   0  19   0
     3   0  19   0
     7   - 139   0
    
    [[email protected] ~]# ps -eo pid,ni,pri|head -5
    PID  NI PRI
    1   0  19
    2   0  19
    3   0  19
    7   - 139

3.pgrep命令

用法:

pgrep [OPTIONS] [PATTERN]

:PATTERN: 支持正则表达元字符书写模式实现进程过滤;

常用选项:

-U UID:仅显示由指定用户身份运行的进程PID
-G GID:仅显示以指定组身份运行的进程PID
-t term: 仅显示指定的终端设备的进程PID
-l: 显示进程PID的同时显示进程名
-a: 显示完整格式的进程名
-u uid: effective user,生效者
-P pid: 显示指定进程的子进程

实例:

1)显示以root身份运行的进程的PID

[[email protected] ~]# pgrep -U root|head -5 
1
2
3
7
8

2)显示以root组身份运行的进程的PID

[[email protected] ~]# pgrep -G root|head -5
1
2
3
7
8

3)显示以tty1终端运行的进程PID

[[email protected] ~]# pgrep -t tty1
88406
88472
88494
88495

4)显示以root身份运行,root组运行,且终端为tty1进程的PID与进程名

[[email protected] ~]# pgrep -U root -G root -t tty1 -l
88406 bash
88472 startx
88494 xinit
88495 X

5)使用正则表达式做模式匹配

[[email protected] ~]# pgrep "\<bash\>" -l  
19320 bash
88406 bash
125591 bash

4.pidof:根据进程名获取其PID;

格式:

pidof PROGRAM

实例:

[[email protected] ~]# pidof bash
125591 88406 81122 19320

5.top:display Linuxprocesses,动态显示进程信息

格式:

top  [OPTION]

常用选项:

-d #:指定刷新时间间隔,默认为3秒;

-b:以批次方式显示;

-n #:显示多少批次;

-p PID:通过指定监控进程ID来仅仅监控某个进程的状态。

-c:显示整个命令行而不只是显示命令名

-i: 使top不显示任何闲置或者僵死进程

常用交互式命令:

(1)在top显示过程中通过交互式命令指定排序(默认CPU):

  • P: 按照CPU百分比大小将进程降序排序
  • M:Memory占用量大小将进程降序排序
  • T:CPU累积时间占用量将进程降序排序

(2)首部信息关闭

  • l: top行信息是否显示;
  • t:是否显示进程及CPU相关的信息
  • 1:是否单独显示每颗CPU的使用率
  • m: 是否显示内存及swap相关的信息

(3)其他命令

  • q: 退出top
  • s: 修改刷新时间间隔;
  • k: 杀死指定进程
  • L:搜索字符串

说明:

load avg:

CPU上等待运行的进程队列的队列长度;
过去1分钟、5分钟、15分钟的平均长度;

cpu(s)行解释:

us: user space,用户空间占用CPU百分比
sy: system,内核空间占用CPU百分比
ni: nice,用户进程空间内改变过优先级的进程占用CPU百分比
id: idle,空闲CPU百分比
wa: waiting io,等待输入输出的CPU时间百分比
hi: hardware interrupt,硬件CPU中断占用百分比
si: software interrupt,软件CPU中断占用百分比
st: stolen,虚拟机占用百分比

默认上,top显示这些关于进程的属性:

PID

进程ID,进程的唯一标识符

USER

进程所有者的实际用户名。

PR

进程的调度优先级。这个字段的一些值是‘rt‘。这意味这这些进程运行在实时态。

NI

进程的nice值(优先级)。越小的值意味着越高的优先级。

VIRT

进程使用的虚拟内存。

RES

驻留内存大小。驻留内存是任务使用的非交换物理内存大小。

SHR

SHR是进程使用的共享内存。

S

这个是进程的状态。它有以下不同的值:

D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态

%CPU

自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM

进程使用的可用物理内存百分比。

TIME+

任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND

运行进程所使用的命令。

还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。

实例:

[[email protected] ~]# top
top - 01:21:28 up 9 days, 19:36,  3 users,  load average: 0.07, 0.08, 0.06
Tasks: 419 total,   2 running, 417 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.6 us,  1.9 sy,  0.0 ni, 96.4 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3098484 total,   281664 free,   566888 used,  2249932 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  2393584 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                 
  6851 root      20   0       0      0      0 S  6.2  0.0   0:07.28 kworker/0:1                             
 84869 root      20   0  146412   2240   1368 R  6.2  0.1   0:00.01 top                                     
     1 root      20   0  128996   8856   1712 S  0.0  0.3   3:37.38 systemd

# top   //每隔3秒显式所有进程的资源占用情况
# top -d 2  //每隔2秒显式所有进程的资源占用情况
# top -c  //每隔3秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
# top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
# top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

更加详细内容: http://www.cnblogs.com/qiwenhui/articles/4262044.html

:VIRT=SWAP+RES

6.htop命令

需要安装(第三方安装包):

[[email protected]~]#  yum  install -y htop

(1)常用选项:

-d #:指定延迟时间间隔;

-u UserName:仅显示指定用户的进程;

-s COLUME:以指定字段进行排序;

(2)常用交互式命令:

l:显示选定的进程打开的文件列表;

s:跟踪选定的进程的系统调用;

t:以层级关系显示各进程状态;

u: 仅显示指定用户的进程

k:发送信号,15通常用来杀死命令,15不起作用可用用9信号

#:快速定位到PID为#的进程上

(3)显示描述

左上方数据:表示每颗CPU、内存、交换内存的使用率

右上方数据

  • Tasks:当前的任务数量,用户空间进程
  • thr:线程数量
  • running:运行的数量
  • Load average :过去一分钟、五分钟、十五分钟的平均负载

(4)支持鼠标操作的文本窗口

h命令获取帮助 

(5)获取支持排序字段

[[email protected] ~]# htop --sort-key=help 
PID
Command
STATE
PPID
PGRP
SESSION
TTY_NR
TPGID
FLAGS
时间: 2024-10-08 13:27:30

Linux进程与作业管理(一)的相关文章

Linux进程及作业管理

一.进程查看及其管理工具 --------------------------------------------- ps命令:报告当前进程的快照信息 ps - report a snapshot of the current processes. 选项: -A:显示所有进程与-e相同的效果 -a:不与终端相关的所有进程 -u:与用户相关的进程 -x:通常和a,u结合使用,显示出来比较全面的信息 -f:做一个更为完整的输出 常用的组合:     ps -ef 以完整的信息显示所有进程信息   

Linux系统--Linux进程与作业管理(2)

Linux系统--Linux进程与作业管理(2) Linux进程相关的基本概念已经了解,Linux进程管理的一些命令: pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkil,job,bg,fg,nohup 1.pstree命令: pstree - display a tree of processes:以树状形式显示当前系统进程,和命令tree相似. 2.ps命令: ps - report a snapshot of 

Linux 进程和作业管理

Linux进程和作业管理 ================================================================= 内核的功能:进程管理(进程调用,保存现场,恢复现场).文件系统.网络功能.驱动功能.安全功能 process:运行中的程序的一个副本: 存在生命周期 linux内核存储进程信息的固定格式:task struct(任务结构) 多个任务的task struct组件的链表:task list(任务列表) 进程创建: init进程是由内核创建,其余

Linux系统--Linux进程与作业管理(1)

Linux系统--Linux进程与作业管理(1) 先了解一些基本概念:内核的功能,程序的组成,进程,进程的类型和运行状态,进程的分类,Linux中的第一个进程init,Linux内核存储进程信息的格式,进程的优先级,进程间的通信. 1.Linux内核的功能和程序的组成: Linux内核是一种开源电脑操作系统.是用来与硬件打交道并为用户程序提供一个有限服务集的软件.Linux内核支持模块化,支持模块的动态加载和卸载,可以把模块驱动编辑到内核中,也可以不编辑到内核,直接调用需要的模块.Linux内核

Linux系统--Linux进程与作业管理(3)

Linux系统--Linux进程与作业管理(3) Linux进程管理和作业管理的另外几种管理命令:vmstat,dstat,pmap,glances,kill 1.vmstat命令: vmstat - Report virtual memory statistics vmstat命令可以看到整个机器的CPU,内存,IO等使用情况.此命令不是动态显示的,需要手动进行刷新. vmstat #:相隔#秒刷新. 直接执行vmstat命令的结果为: 各个字段的含义: procs: r:等待运行的进程的个数

Linux自学笔记——linux进程及作业管理

内核的功用主要有进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能这几个方面,本文主要讨论linux进程及作业管理. 进程管理: 进程,process,运行中程序的一个副本,且存在生命周期: 进程分为CPU bound和I/Obound. CPU bound:CPU密集型(类似于高清视频) I/O bound:IO密集型(编辑器等频繁IO操作) Linux内核存储进程信息的固定格式为:task struct(结构体) 多个任务的task struct组件的链表:task list 进程创

Linux 进程及作业管理

概述: 一.进程的相关概念: 1.相关定义: 内核的功用:   进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等: 通俗的来说进程是运行起来的程序.唯一标识进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的 : 进程 Process:  运行中的程序的一个副本,是被载入内存的一个指令集合:   ˙进程ID(Process ID,PID)号码被用来标记各个进程;   ˙UID.GID.和SELinux语境决定对文件系统的存

Linux进程及作业管理相关命令

作为初学者,Linux永远是那么神秘,高大上的内容我也不会,所以在这里只能整理一下与管理相关的命令了,如果有不对的或不准确的地方,请指正. 可参考:Linux内核--进程管理与调度http://www.linuxidc.com/Linux/2014-08/105366.htm pstree:显示进程状态树 作用:列出当前的进程,以及它们的树状结构 用法:pstree [选项] -a: 显示执行程序的命令与完整参数 ps:查看系统中进程的状态 在/proc/目录中包含了进程和内核模拟生成的伪文件,

linux进程及作业管理的四大长老-htop/ dstat /top/ ps

   一.进程简介     进程是linux用来表示正在运行的程序的一种抽象概念,程序内存的使用,处理器时间和I/O资源就是通过这个对象进行管理和监视的. 一个程序要先运行在用户空间,当他需要去使用硬件资源的时候,就不得不去调动内核才能取得使用权,这时候调动内核,进入内核空间,当内核处理完毕需求之后,将指令返回给用户,一个调用完成. 进程会以时间片段在CPU运行的,CPU以一根时间线被划分成无数个片段:当一个进程运行到某个阶段,需要暂时终止的时候,需要保存一个进程运行的现场,叫保存现场:执行到某