Linux 进程及作业管理




概述:



一、进程的相关概念:

1.相关定义:


  • 内核的功用:
      进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等;
  • 通俗的来说进程是运行起来的程序。唯一标识进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的 ;
  • 进程 Process:
     运行中的程序的一个副本,是被载入内存的一个指令集合;
       ˙进程ID(Process ID,PID)号码被用来标记各个进程;
       ˙UID、GID、和SELinux语境决定对文件系统的存取和访问权限;
       ˙通常从执行进程的用户来继承;
       ˙存在生命周期;
  • task struct:Linux内核存储进程信息的数据结构格式;
  • task list:多个任务的的task struct组成的链表;

2.进程创建


  • init:第一个进程
            父子关系
  • 进程:都由其父进程创建,COW(写实复制)
            fork(), clone()
  • 创建过程:

    1.系统首先以fock的方式复制(cow)一个与父进程相同的进程,这个进程与父进程唯一的差别就是PID不同,但是这个进程还会多一个PPID的参数,PPID就是父进程的程序识别码PID;
       
       2.然后新产生的进程开始加载实际要运行的程序进行执行。

3.进程优先级


  • 进程的优先级是用数字0-139来表示的,分为两类:
     
         99-1:实时优先级,由内核维护(数字越大,优先级越高)

100-139:静态优先级,使用nice值来调整(数字越小,优先级越高);

  • Nice值
        -20,19对应静态优先级100-139
  • Big O
        时间复杂度,用时和规模的关系
          O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)

4.进程内存:


  • Page Frame: 页框,用存储页面数据,存储Page 4k;
  • LRU:Least Recently Used 近期最少使用算法,释放内存;

    注:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,          操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。

  • 物理地址空间和线性地址空间;
  • MMU(内存管理单元):负责转换线性和物理地址

    注:MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)      中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,        以及 提供硬件机制的内存访问授权,多用户多进程操作系统。

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


  • 在计算机网络体系中,主机与主机之间的通信,实质上是主机进程与主机进程之间的通信,也就是进程间的通信;
  • 同一主机上
          signal:信号指令;
          shm: shared memory 共享内存空间
          semophore:信号量,一种计数器
  • 不同主机上:
          rpc: remote procedure call
          socket: 套接字,IP和端口号

6.Linux内核抢占式多任务


7.进程类型:


根据进程与终端的关系可以分为:

  • 守护进程: daemon,在系统引导过程中启动的进程,和终端无关的进程;
  • 前台进程:跟终端相关,通过终端启动的进程;
     注意:两者可相互转化

8.进程状态:


进程被内核调度的过程中的状态可以分为:

  • 运行态:running
  • 就绪态:ready
  • 睡眠态:

可中断:interruptable
     不可中断:uninterruptable,
         通常是指被IO阻塞的过程,等待IO满足之前无法继续运行。

  • 停止态:stopped,暂停于内存中,但不会被调度,除非手动启动;
  • 僵死态:zombie,结束进程,父进程结束前,子进程不关闭

9.进程的分类:


  • CPU-Bound:CPU密集型,非交互;
  • IO-Bound:IO密集型,交互;
  • 根据在linux不同模式下运行分为:

    核心态:这类进程运行在内核模式下,执行一些内核指令(Ring 0)。
       用户态:这类进程工作在用户模式下,执行用户指令(Ring 3)。

  • 如果用户态的进程要执行一些核心态的指令,此时就会产生系统调用,系统调用会请求内核指令完成相关的请求,就执行的结果返回给用户态进程。

10.进程与线程的关系:


  • 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位
  • 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
  • 进程——资源分配的最小单位,线程——程序执行的最小单位
  • 从函数调用上来说,进程创建使用fork()操作;线程创建使用clone()操作

参考资料:《Linux内核设计与实现》《深入理解Linux内核》




二、进程的系统管理工具


  • Linux系统状态的查看及管理工具
        pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill     pkill, job, bg, fg, nohup
  • CentOS 5:SysV init

CentOS 6:upstart

CentOS 7:systemd
   
   /sbin/init

1.pstree命令

pstree-display a tree of processes(显示查看进程树)

以下为CentOS 6 和 CentOS 7 的区别

[[email protected] ~]# pstree
init─┬─abrtd           #可以看到都是有init生成的
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─automount───4*[{automount}]
     ├─bonobo-activati───{bonobo-activat}
     ├─clock-applet
     ├─console-kit-dae───63*[{console-kit-da}]
     ├─crond
     ├─cupsd
     ├─2*[dbus-daemon]
     ├─2*[dbus-launch]
     ├─devkit-power-da
     ├─dhclient
     ├─gconf-im-settin
     ├─gconfd-2
[[email protected] ~]# pstree
systemd─┬─NetworkManager─┬─2*[dhclient]
        │                └─2*[{NetworkManager}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─alsactl
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─chronyd
        ├─crond
        ├─cupsd
        ├─dbus-daemon
        ├─gssproxy───5*[{gssproxy}]
        ├─login───bash
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───5*[{polkitd}]

2./proc:内核中的状态信息

Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中


  • Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
  • 内核参数:
        可设置其值从而调整内核运行特性的参数,在/proc/sys/下;
        状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;
  • 参数:模拟成文件系统;
  • 进程:
         /proc/#:
              #:PID


2.启动进程的方式:

   系统启动过程中自动启动:与终端无关的进程;

用户通过终端启动:与终端相关的进程





三、显示系统当前进程的运行情况

ps: process state

ps-report a snapshot of the current processes



1.使用ps来查看进程信息

  • 语法:ps[OPTION]...
  • 支持三种选项:
       UNIX选项 如 -a
       BSD选项  如 a
       GUN选项  如 --help
  • 选项和参数

    默认显示当前终端中的进程;
      a 所有与终端相关的进程
      x 所有与终端无关的进程
      u 显示进程所有者的信息;

f 显示进程的父进程;
      o属性… 选项显示定制的信息

示例:如下

[[email protected] 1]# ps a
   PID TTY      STAT   TIME COMMAND
  2024 tty2     Ss+    0:00 /sbin/mingetty /dev/tty2
  2026 tty3     Ss+    0:00 /sbin/mingetty /dev/tty3
  2028 tty4     Ss+    0:00 /sbin/mingetty /dev/tty4
  2030 tty5     Ss+    0:00 /sbin/mingetty /dev/tty5
  2032 tty6     Ss+    0:00 /sbin/mingetty /dev/tty6
  2105 tty1     Ss+    0:00 -bash
  3922 pts/1    Ss+    0:00 /bin/bash
  4864 pts/2    Ss     0:00 -bash
  5142 pts/2    R+     0:00 ps a
[[email protected] 1]# ps
   PID TTY          TIME CMD
  4864 pts/2    00:00:00 bash
  5144 pts/2    00:00:00 ps
[[email protected] 1]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19344  1632 ?        Ss   08:27   0:01 /sbin/init
root          2  0.0  0.0      0     0 ?        S    08:27   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:27   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    08:27   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S    08:27   0:00 [stopper/0]
root          6  0.0  0.0      0     0 ?        S    08:27   0:00 [watchdog/0]
root          7  0.0  0.0      0     0 ?        S    08:27   0:18 [events/0]
root          8  0.0  0.0      0     0 ?        S    08:27   0:00 [events/0]
root          9  0.0  0.0      0     0 ?        S    08:27   0:00 [events_long/0]
root         10  0.0  0.0      0     0 ?        S    08:27   0:00 [events_power_ef]
root         11  0.0  0.0      0     0 ?        S    08:27   0:00 [cgroup]
root         12  0.0  0.0      0     0 ?        S    08:27   0:00 [khelper]

2.常用组合之一:aux

VSZ: Virtual memory SiZe,虚拟内存集,线性内存RSS: ReSidentSize, 常驻内存集STAT:进程状态    R:running    S: interruptable sleeping 可中断睡眠    D: uninterruptable sleeping 不可中断睡眠    T: stopped 停止状态    Z: zombie  僵死态    +: 前台进程    l: 多线程进程    N:低优先级进程    <: 高优先级进程    s: session leader,会话(子进程)发起者

3.常用组合之二:-ef

-e: 显示所有进程

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

[[email protected] 1]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 08:27 ?        00:00:01 /sbin/init
root          2      0  0 08:27 ?        00:00:00 [kthreadd]
root          3      2  0 08:27 ?        00:00:00 [migration/0]
root          4      2  0 08:27 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 08:27 ?        00:00:00 [stopper/0]
root          6      2  0 08:27 ?        00:00:00 [watchdog/0]
root          7      2  0 08:27 ?        00:00:20 [events/0]
root          8      2  0 08:27 ?        00:00:00 [events/0]
root          9      2  0 08:27 ?        00:00:00 [events_long/0]
root         10      2  0 08:27 ?        00:00:00 [events_power_ef]
root         11      2  0 08:27 ?        00:00:00 [cgroup]
root         12      2  0 08:27 ?        00:00:00 [khelper]
root         13      2  0 08:27 ?        00:00:00 [netns]
root         14      2  0 08:27 ?        00:00:00 [async/mgr]

4.常用组合之三:-eFH

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

C:cpu utillization

PSR:运行于哪颗cpu之上

-H: 以进程层级格式显示进程相关信息

[[email protected] 1]# ps -eFH
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          2      0  0     0     0   0 08:27 ?        00:00:00 [kthreadd]
root          3      2  0     0     0   0 08:27 ?        00:00:00   [migration/0]
root          1      0  0  4836  1632   0 08:27 ?        00:00:01 /sbin/init
root        581      1  0  2709   952   0 08:27 ?        00:00:00   /sbin/udevd -d
root       2033    581  0  2708   940   0 08:27 ?        00:00:00     /sbin/udevd -d
root       2034    581  0  2708   920   0 08:27 ?        00:00:00     /sbin/udevd -d
root       1525      1  0  6899   868   0 08:27 ?        00:00:00   auditd
root       1559      1  0 62288  1696   0 08:27 ?        00:00:00   /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
rpc        1610      1  0  4745   892   0 08:27 ?        00:00:00   rpcbind
dbus       1630      1  0  5559  1700   0 08:27 ?        00:00:00   dbus-daemon --system
rpcuser    1652      1  0  5838  1380   0 08:27 ?        00:00:00   rpc.statd
root       1687      1  0 47243  3360   0 08:27 ?        00:00:00   cupsd -C /etc/cups/cupsd.conf

常用组合之四 :-eo axo

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

常用的字段:pid,ni,pri,pcpu,stat,comm,tty,ppid

ni: nice值

pri: priority,优先级

psr: processor, CPU编号

rtprio: 实时优先级

[[email protected] 1]# ps -eo pid,tty,ni,comm
   PID TT        NI COMMAND
     1 ?          0 init
     2 ?          0 kthreadd
     3 ?          - migration/0
     4 ?          0 ksoftirqd/0
     5 ?          - stopper/0
     6 ?          - watchdog/0
     7 ?          0 events/0
     8 ?          0 events/0
     9 ?          0 events_long/0
    10 ?          0 events_power_ef
    11 ?          0 cgroup



Linux 进程及作业管理

时间: 2024-08-10 11:55:02

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进程与作业管理(一)

一.Linux进程概念 1.进程:Process,是运行中的程序的一个副本,有生命周期,都由其父进程创建 Linux内核存储进程信息的固定格式:taskstruct 多个任务的的taskstruct组件的链表:task list 2.进程优先级:0-139 0:一般不使用 1-99:实时优先级:数字越大优先级越高,系统自动安排 100-139:静态优先级:数字越小优先级越高,可手动更改 3.Nice值:-20至19,对应于100到139 普通用户只能将自己的优先级调低,root用户可以随意调制

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以一根时间线被划分成无数个片段:当一个进程运行到某个阶段,需要暂时终止的时候,需要保存一个进程运行的现场,叫保存现场:执行到某