进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。一般来说,Linux系统会在进程之间共享程序代码和系统函数库,所以在任何时刻内存中都只有代码的一份拷贝。

1,ps命令
作用:ps命令主要用于查看系统中进程的状态。
用法:ps [选项]
主要选项如下:
    -e 显示所有进程
    -a 跟终端无关的进程 (BSD风格,不加横杆)
    -x 跟终端有关的进程
    -u 发起者
    -F 额外信息
    -f 显示完整信息
    -j 以作业的方式显示进程
    -H 显示进程的关系
    -o 自定义显示哪些字段
 单一的命令往往显示的结果不是很理想,这里我们可以多个选项同时使用。
 例:ps aux  命令可以获得终端上所有用户的有关进程的所有信息
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   2064   652 ?        Ss   10:05   0:00 init [3]

其中VSZ  虚拟地址大小
    RSS  物理内存大小
 例:例:ps ax
pid  tty  stat time command
  1  ?    Ss   0:00 init [3]

其中   tty中?表示与终端无关
      stat(状态)
        D 不可中断 sleep
        S 可中断 sleep
        R 正在运行或可运行的
        T 停止态
        Z 僵尸态 父进程替子进程收尸
          父进程死的时候会先替子进程找到另外一个父进程
        x 死亡状态
        w  paging
     状态的变化:stoped--sleep--ready--running
 注:sleep (可中断sleep 和不可中断sleep)
        PID 这个进程的ID,下面的PPID为父进程的ID
     在BSD中也会有:
        < 表示高优先级的进程
        N 低优先级
        + 属于某个前台组的进程
        s 某一个回话的leader进程
        l 线程加锁
        + 后台运行进程组
  例:ps -l
  [root@station100 ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  9706  9704  0  75   0 -  1166 wait   pts/1    00:00:00 bash
4 R     0  9908  9706  0  77   0 -  1052 -      pts/1    00:00:00 ps
     F:表示这个进程的标志(flag),4表示用户为超级用户。
     S:表示这个进程的状态(STAT)。
     PID:这个进程的ID,下面的PPID为父进程的ID。
     C:CPU使用的资源百分比
     PRI:Priority(优先级)的缩写。
     NI:Nice值
     ADDR 这是核心功能,指出该进程在内存的那一部分,如果是运行的进程一般都是“-”
     SZ:用掉的内存大小
     WCHAN 当前进程是否正在运行,若为“-”表示正在运行。   
     TTY:登录者的终端位置。
     TIME:用掉的CPU时间。
     CMD 所执行的命令。
  例:ps auxw --sort=rss
    按内存占用情况对进程排序
  例:ps auxw --sort=%cpu
   在进行系统维护时,如果CPU负载突然增加,而又不知道是哪一个进程造成的

其他部分ps命令:
To see every process on the system using standard syntax:
   ps -e
   ps -ef
   ps -eF   显示PID及PPID信息
   ps -ely  会显示nice值NI及优先级PRI

To see every process on the system using BSD syntax:
   ps ax
   ps axu

To print a process tree:
   ps -ejH
   ps axjf  相当于ps -aFH或afh 显示进程关系

To get info about threads
   ps -eLf
   ps axms

To get security info:              
   ps -eo euser,ruser,suser,fuser,f,comm,label
   ps axZ
   ps -eM

To see every process running as root (real & effective ID) in user format:
   ps -U root -u root    自定义显示格式

To see every process with a user-defined format:
   ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
   ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
   ps -eopid,tt,user,fname,tmout,f,wchan

Print only the process IDs of syslogd:
   ps -C syslogd -o pid=

Print only the name of PID 42:
   ps -p 42 -o comm=

2,pstree:显示进程状态树
作用:pstree命令列出当前的进程,以及它们的树状结构。
用法:pstree [选项] [pid|user]

主要选项如下。

-a:显示执行程序的命令与完整参数。

-c:取消同名程序,合并显示。

   -h:对输出结果进行处理,高亮显示正在执行的程序。

-l:以长用法显示。

-n:以PID大小排序。

-p:显示PID。

   -u:显示UID信息。

-G:使用VT100终端编码显示,生成比较清晰的树

-U:使用UTF-8(Unicode)编码显示。
它能将当前的执行程序以树状结构显示。pstree命令支持指定特定程序(PID)或使用者(USER)作为显示的起始。

3,top:显示进程
作用:top命令用来显示系统当前的进程状况。
用法:top [选项]
主要选项如下。
     -b:以批处理的方式执行top,通常会搭配数据流重导向,将批处理的结果输出为文件。
   -c:显示程序并显示程序的完整相关信息,如名称、路径等。
   -i:忽略闲置或已经冻结的程序。
     -d:后面可以接秒数,就是整个进程画面更新的秒数,默认是5秒。
       -n:与-b搭配,需要进行几次top的输出结果。
       -p<进程号>:指定某些个PID来进行观察检测。
     -s:安全模式。
     -u:指定用户名。
   -v:显示版本信息。
   -h:显示帮助信息。
    top命令和ps命令的基本作用是相同的,都是显示系统当前的进程状况。但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。
 例:top
top - 19:21:34 up  9:15,  3 users,  load average: 0.00, 0.00, 0.00
Tasks:  80 total,   1 running,  79 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.0%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    515444k total,   360684k used,   154760k free,    99876k buffers
Swap:  1048568k total,        0k used,  1048568k free,   214912k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                             
 9954 root      15   0  2196  992  804 R  0.3  0.2   0:00.05 top                                  
    1 root      15   0  2064  620  536 S  0.0  0.1   0:04.26 init                                 
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0                          
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                          
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                          
    第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。
第二行显示的是所有启动的、目前运行的、挂起(Sleeping)的和无用(Zombie)的进程。
第三行显示的是目前CPU的使用情况。
第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。
第五行显示交换分区的使用情况,包括总的、使用的、空闲的和用于高速缓存的交换分区。
第六行显示的项目最多,下面列出了详细解释。
PID(Process ID):进程标志号,是非零正整数。
USER:进程所有者的用户名。
    PR:进程的优先级别。
NI:进程的优先级别数值。
    VIRT:进程占用的虚拟内存值。
RES:进程占用的物理内存值。
SHR:进程使用的共享内存值。
STAT:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
     %CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
TIME:该进程启动后占用的总的CPU时间。
COMMAND:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。

在top执行过程中可以使用的按键命令:
     ?:显示在top中可以输入的按键命令。
<空格>:立刻刷新。
P:按CPU的使用资源排序显示。
T:该进程使用的CPU时间累积(TIME+)排序。  
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:按内存的使用资源排序显示。
     N:按PID来排序
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
     r:给某个PID重新确定一个值。
     q:退出top命令。
top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。
   例:top -c
显示程序及其完整相关信息

例:top -d 3
    设定top命令的时间间隔为3秒

例:top -n 5
   设定系统任务信息更新5次后结束top命令

4,who
  作用:该命令主要用于查看当前在线上的用户情况。
who命令的常用参数进行说明。
-m 和“who am i”的作用一样,显示运行该程序的用户名。
-q,--count 只显示用户的登录帐号和登录用户的数量,该选项优先级高于其他任何选项。
-s         忽略。主要是用于和其他版本的who命令兼容。
-i,-u,--idle 在登录时间后面显示该用户最后一次对系统进行操作至今的时间,也就是常说的“发呆”时间。
-H,--heading 显示一行列标题

5,w命令
   该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细和科学,可以认为w命令就是who命令的一个增强版。

 相应参数进行说明:
-h 不显示标题。
-u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。
-s 使用短模式。不显示登录时间、JCPU和PCPU时间。
-f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名,当然系统管理员可以对源文件作一些修改使得显示该项成为默认值。
-V 显示版本信息。

6,其他配合使用的命令
  pgrep -G root 显示所有的pid
  pidof cupsd  获取某个进程的pid(cupsd为一个进程名)
  free -m      查看虚拟内存的使用情况
  kill  进程号 默认信号是15
  killall 进程名
  例:killall httpd
      pkill SINGAL pattern

7,nice值及优先级

静态优先级:100-139 ,可以调整
动态优先级:0-99 数字小优先级小 (实时优先级)

手动调整,nice(-20 - 19)默认为零 把自己的优先级降低(普通用户)
                                   可以随意调整自己的优先级(root管理者)
nice 启动进程时直接指定nice值
nince -n 6 COMMAND

renice:对已经启动过的进程调整其nice值
renice -5 423 (-5为nice值,优先级,423为进程号)

8,作业控制(job)
实际中是:shell结束 作业也结束
使用&后: shell结束 作业不结束

例:nohup cp -r /etc /tmp/abc &
   shell结束,作业不结束

ctrl+z      把job送到后台 stoped状态
&           在后台也在运行
fg          调用到前台
jobs        查看在后台的作业
fg          默认调用的是带+号的作业,调用后台job
ps aux | ls 查看ls的id
bg %2       2为作业号
kill %2     直接杀死作业 显示已终止
kill -9 %2  直接杀死 显示已杀死


https://blog.51cto.com/kingshuo/627406