g87616758 发表于 2018-5-17 09:26:46

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

  

  

内核的功用主要有进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能这几个方面,本文主要讨论linux进程及作业管理。
进程管理:
      进程,process,运行中程序的一个副本,且存在生命周期;
      进程分为CPU bound和I/Obound。
         CPU bound:CPU密集型(类似于高清视频)
         I/O bound:IO密集型(编辑器等频繁IO操作)
      Linux内核存储进程信息的固定格式为:task struct(结构体)
         多个任务的task struct组件的链表:task list
      进程创建:
         在centos6上,init为初始化进程,父进程。
         请求发出者(进程)都由父进程创建,然后为系统调用;
         进程:fork()   clone()
      IPC: Inter Process Communication
         同一主机上:
               signal
               shm: shared memory
               semerphor
         不同主机上:
               rpc: remote procecure call
               socket:
      进程调度:保存现场,恢复现场
         进程运行程序,是程序的一部分
               多任务:多进程同时运行
                            抢占式多任务
      进程优先级:
      0-139:
         1-99:实时优先级,数字越大,优先级越高;
         100-139:静态优先级,数字越小,优先级越高;
         Nice值:-20,19   -20相当于100,19相当于139;
      每个进程运行时间不同,linux支持抢占式多任务,当一个低优先级的程序在运行,这时有一个高优先级的运行,过段时间后这个高优先级的提前运行。
      算法复杂度:Big 0 (衡量标准算法)
         o(1):恒定的,无论优先级,消耗时间相同(最佳的)
o(logn):每次调度,调度程序需要从树中找出优先级最高的进程
o(n):线性的
o(n^2):抛物线机制
o(2^n):随队列深度增长
      进程状态:
         运行态:running
         就绪态:ready
         睡眠态:
               可中断:interruptable
               不可中断:uninterruptable
         停止态:暂停于内存中,但不会被调度,除非手动启动之:stopped
         僵死态:zombie
Linux系统上的进程查看及管理工具:
   在linux系统中主要的进程管理工具有:pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,job,bg,fg,nohup,nice,renice,killall,…
1.   pstree命令:
pstree - display a tree of processes
   
在centos6中父进程为init,而在centos7中,父进程为systemd

pstree –p:显示各进程的PID

其它用法选项可参照man手册。
2.   ps命令:process state
ps命令显示的是ps命令执行时系统上进程信息的快照,是静态的结果。
Linux运行中的内核的相关信息是通过/proc伪文件系统输出的;各进程都有一个其PID命名的子目录,每个子目录中许多文件存储了进程的相关信息。
进程文件:/proc/#
             #:PID

ps - report a snapshot of the current processes.

ps
选项有三种风格:
1 UNIX options, which maybe grouped and must be preceded by a dash.
2 BSD options, which maybe grouped and must not be used with a dash.
3 GNU long options, which arepreceded by two dashes.
      启动进程的方式:
         系统启动过程中自动启动:与终端无关的进程;
         通过用户终端启动:与终端相关的进程;
      常用组合之一:aux
         a:所有与终端相关的进程;
         x:所有与终端无关的进程;
         u:以用户为中心组织进程状态信息显示;
         
         VSZ:虚拟内存集;
         RSS:Resident Size,常驻内存集;
         STAT:
               R:running;
               S:interruptable sleeping
               D:uninterruptable sleeping
               T:stopped
               Z:zombie
            
               +:前台进程;
               1:多线程进程;
               N:低优先级进程;
               <:高优先级进程;
               s:session leader;
      常用组合之二:-ef
         -e:显示所有进程;
         -f:显示完整格式的进程信息;
         
      常用组合之三:-eFH
         -F:显示额外信息
               C:cpu utilization   cpu利用率
               PSR:运行在哪一颗cpu之上
         -H:以层级结构显示进程的相关信息;
               
         常用组合之四:-eo,axo
         o field2,field2,…:自定义要显示的字段列表,以逗号分隔;
               常用的field:pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio
                      ni:nice值;
                      priority:优先级;
                      rtprio:realtime priority,实时优先级;
         
3.   pgrep,pkill命令:
pgrep, pkill - look up or signalprocesses based on name and other attributes
pgrep pattern
-uuid:effectiveuser;
-Uuid:readuser;
-tTERMINAL:与指定的终端相关的进程;
-l:显示进程名;
-Ppid:显示此进程的子进程;
   
pkill的用法与pgrep完全一样。
4.   pidof命令:根据进程名,取其id
pidof -- find the process ID of a running program.
pidof[ program ]

5.   top命令:
top - display Linux tasks

排序:
P:以占据cpu百分比排序;

M:已占据内存百分比排序;

T:累计占用CPU时间排序;

首部信息:按以下命令可以显示或隐藏指定的信息;
uptime信息:l命令
tasks及cpu信息:t命令
内存信息:m命令
退出命令:q
修改刷新时间间隔:s

终止指定的进程:k

选项:
-d #:指定刷新时间间隔,默认为3秒;
       #top –d 1:指定刷新时间为1秒刷新一次;

-b:以批次方式显示;
-n #:显示多少批次;
      #top –b –n 2:以批次显示显示两批,自动退出;

6.   uptime命令:显示系统时间、运行时长及平均负载;
过去一分钟、五分钟和十五分钟的平均负载;
等待运行的进程队列的长度;
uptime - Tell how long the system has been running.
#uptime

7.   htop命令:
centos6上没有htop的安装包,我们需要手动配置epel的yum源安装htop;
htop - interactive process viewer:交互式进程查看器

选项:
-d #:指定延迟时间间隔;
-u USERNAME:仅显示指定用户的进程;
       #htop –u rpc

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

子命令:

l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各种进程状态;
a:将选定的进程绑定至某指定的CPU核心;
8.   vmstat命令:
vmstat - Report virtual memory statistics显示虚拟内存状态
vmstat]

proc:
r:等待运行的进程运行的任务队列的长度;
b;处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
memory:
swpd:交换内存使用总量;
free:空闲的物理内存总量;
buffer:用于buffer的内存的总量;
cache:用于cache的内存总量;
swap:
si:数据进入swap中的数据速率(kb/s)
so:数据离开swap的速率(kb/s)
io:
bi:从块设备读入数据到系统的速度(kb/s)
         bo:保存数据至块设备的速率(kb/s)
      system:
         in:interrupts,中断速率;
         cs:context switch,上下文切换的速率;
      cpu:
         us:user space;
         sy:system;
         id:idle;
         wa:wait;
         st:stolen;
      选项:
         -s:显示内存统计数据;
         
      #vmstat 2 6          每两秒显示一次,显示六次退出;
      
9.   pmap命令:
pmap - report memory map of a process显示一个进程的内存映射
pmap pid [...]
-x:显示详细信息的格式;

另一种查看方式:cat /proc/PID/maps

10.glances命令:
glances - A cross-platform curses-based monitoring tool      一个跨平台的多视窗根基的监控工具
glances [-bdehmnrsvyz1][-Bbind] [-cserver][-C conffile] [-p port] [-P password]
       [--password] [-trefresh] [-f file] [-o output]
#glances

按“h”帮助选项:

常用选项:
-b:以byte为单位显示网上数据速率;
-d:关闭磁盘I/O模块;
-m:关闭mount模块;
-t #:刷新时间间隔;
-1:每个CPU的相关数据单独显示;
-o {HTML|CSV}:输出格式;
-f /PATH/TO/SOMEWHERE:设定输出文件的位置;
C/S模式下运行glances命令:
服务模式:
       glances –s -BIPADDR
       IPADDR:本机的某地址,用于监听;

客户端模式:
       glances –c IPADDR
       IPADDR:是远程某服务器的地址;

11.dstat命令:
- versatile tool for generating system resource statistics    显示系统资源状态的通用工具
dstat [-afv] ]

常用选项:
-c, --cpu:显示cpu相关信息;

       -C #,#,…,total
-d,--disk:显示磁盘的相关信息;

       -D sda,sdb,…,total
      
-g:显示page相关的速率数据;
-m:memory的相关统计数据;

-n:interface的相关统计数据;

-p:显示process的相关统计数据;

-r:显示io请求的相关统计数据;

-s:显示swapped的相关统计数据;

-y:显示系统相关数据,包括中断和进程切换;

--tcp:显示tcp的相关数据
--udp:显示udp的相关数据
--raw:显示raw的相关数据
--socket:显示套接字的相关数据
--ipc:显示进程通信相关的速率数据

--top-cpu:显示最占用cpu的进程;

--top-io:最占用io的进程;
--top-mem:最占用内存的进程;
--top-lantency:延迟最大的进程;
      用于向进程发送信号,以实现对进程的管理;
      显示当期系统可用信号:
12.kill 命令:
kill- terminate a process
用于向进程发送信号,以实现对进程的管理;
显示当期系统可用信号:
         kill –l
         
            每个信号的标识有三种:
1)         信号的数字标识;
2)         信号的完整名称;
3)         信号的简写名称;
向进程发送信号:
kill[-s signal|-SIGNAL]pid...
常用信号:
1)         SIGHUP:无须关闭进程而让其重读配置文件;
2)         SIGINT:终止正在运行的进程,相当于ctrl+c;
9)         SIGKILL:杀死运行中的进程;
15)   SIGTERM:中止正在运行中的进程;
18)   SIGCONT:继续运行指定进程;
19)   SIGSTOP:暂停进程;
示例:启用httpd服务,对此进程进行管理;
1.   启用httpd服务,检查80端口是否处于监听状态。

2.   查看httpd进程;

3.   杀死运行中的pid为3099的进程,并查看结果;
#kill -9 3099

4.   默认信号为15,用下面的方法可以中止信号;

或者

13.kllall命令:
killall - kill processes by name
killall[-SIGNAL]program
示例:禁用httpd服务;

Linux系统作业控制:
job:
前台作业(foregroud):通过终端启动后,且启动后会一直占据终端;
后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端)

如何让作业运行于后台?
1)运行中的作业
Ctrl+z

注意:送往后台后,作业会转为停止态;
2)尚未启动的作业
#COMMAND &

注意:此类作业虽然被送往后台,但其依然与终端相关;如果希望把送网后台的作业剥离与终端的关系;
      #nohup COMMAND &
查看所有作业:
#jobs

可实现作业控制的常用命令:
# fg [[%]JOB_NUM]:把指定的作业调回前台;

# bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行;但是此作业必须支持后台运行;

# kill %JOB_NUM:终止指定的作业,kill作业号的%不可以省略;

调整进程的优先级:
可通过nice值调整的优先级范围:100-139;
      分别对应于:-20,19
进程启动时,其nice值默认为0,其优先级是120;
nice命令:
      以指定的nice值启动并运行命令
            # nice ...]
            选项:
                  -n NICE
      注意:仅管理员可调低nice值;


renice命令:
            # renice[-n] NICEPID...
            
      查看Nice值和优先级:
            psaxopid, ni, priority, comm


  
页: [1]
查看完整版本: Linux自学笔记——linux进程及作业管理