作业控制与进程管理

1、进程类型

    

交互进程——由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
批处理进程——这种进程和终端没有联系,是一个进程序列。
监控进程(也称守护进程)——Linux系统启动时启动的进程,并在后台运行。

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

2、进程状态

   在内存中运行的进程也有着各种各样的状态

        运行态R:running

        就绪态:ready

        睡眠态

            可中断S:interruptable

            不可中断D:uninterruptable

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

        僵死态Z:zombie,结束进程,父进程结束前,子进程不关闭

3、进程调度    

      调度策略:调度策略就是这样一组规则:决定什么时候以怎样的方式选择一个新进程运行。所以定义一个进程的优先级来满足这样一种策略。这个策略以0-139的优先级来表示。

           实时优先级:1-99

               无需调整,数字越大,优先级越高

           静态优先级:100-139

               可调整,数字越小,优先级越高

            优先级以Nice值调整

                Nice:-20—-19 ,存在于task_struct结构体中  

公式如下:        

    pri(new)=nice+pri(old)    

    调度算法:早起的Linux中,调度算法是根据进程的优先级选择“最佳”进程来执行,它的缺点是时间开销与“可运行进程数量”有关。某种调度算法一定满足一种函数关系,业界称为Big O        

        Big O:时间复杂度,用时和规模的关系。有:

        O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)

一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程。


作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意地挂起进程或重新启动进程。作业控制是许多shell(包括bash和tcsh)的一个特性,使用户能在多个独立作业间进行切换。

作业控制

作业控制,指控制当前正在运行的进程的行为,也称为进程控制。是Shell的一个特性,使用户能在多个独立进程间进行切换。

常用命令

命令或快捷键    功能说明

cmd&     该命令在后台运行

Ctrl+d     终止一个正在前台运行的进程(含有正常含义)

Ctrl+c     终止一个正在前台运行的进程(含有强行含义)

Ctrl+z     挂起一个正在前台运行的进程

jobs      显示后台作业和被挂起的进程

bg       重新启动一个挂起的作业,并在后台运行

fg       把一个在后台运行的作业放到前台运行

常用的作业标识符

标识符      说明

%N      第N号作业

%S      以字符串S开头的被命令行调用的作业

%?S     包含字符串S的被命令行调用的作业

%+      默认作业(前台最后结束的作业,或后台最后启动的作业),等同于%%

%-      第二默认作业


直接将命令放到后台“执行”的&

 在bash的环境下,

 前台指:你可以控制的作业

后台指:在内存可以自行运行的作业,你无法直接控制它,除非以bg/fg等命令将该作业调用出来。

范例:

        [root@redflag ~]# tar –zpcf /tmp/etc.tar.gz /etc &

[1] 24874  <== [job number] PID

[root@redflag ~]#     <==可以继续工作,不受影响。

这里job1在后台继续工作,你可在前台继续操作linux。过了一会,会突然出现这个数据:

[1] + Done        tar –zpcf  /tmp/etc.tar.gz /etc  #这是表示[1]作业已经完成

该命令最大的好处就是不怕被“[Ctrl]+c”这个中断指令来中断了

这里就会出现一个问题,如果上面的命令是

[root@redflag ~]# tar –zpcvf /tmp/etc.tar.gz /etc &

 这时在后台执行的命令,如果有stdout和stderr时,它的数据是输出到屏幕上,所以我们无法看到提示符,也就无法完好地控制前台作业。所以,最好是使用数据流重导向,将输出数据传至某个文件中。我们可以这样做:       

[root@redflag ~]# tar –zpcvf  /tmp/etc.tar.gz  /etc > tpm/log.txt  2>&1  &

将“当前”作业放到后台“暂停”:[crtl]+Z

如果你正在进行vi,但你想查找某个文件,需要到bash环境搜索。此时你可以暂时离开vi

    [root@redflag ~]# vi ~/.bashrc

 # 在vi 的一般模式下,按ctrl+z

[1]+  Stopped      /usr/bin/vim ~/.bashrc  #(+)表示当前在后台下默认的作业

[root@redflag ~]#   <== 获取了前台的控制权

三、 观察当前后台作业状态:jobs

  [root@redflag ~]# jobs [-lrs]

  参数:

   -l:除了列出作业号之外,同时列出PID

   -r:仅列出正在后台运行的作业

   -s:仅列出正在后台暂停的作业

将后台作业拿到前台处理,fg

   [root@redflag ~]# fg %jobnumber

   范例:

      [root@redflag ~]# jobs

    [1]+ 24988 Stopped     /usr/bin/vim ~/.bashrc

    [2]- 25006 Stopped     /usr/bin/vim ~/.bash_history

   [root@redflag ~]# fg   <==默认取出+的作业,即[1]

   [root@redflag ~]# fg %2 <==直接规定取出的作业号码

  五、 作业在后台运行:bg

   之前都是将作业放到后台去“暂停”,而bg实现一个作业在后台运行。

     [root@redflag ~]# find / -perm +7000

    #此时,请立刻按ctrl+z暂停

    [1]+ stopped       find / -perm +7000

   [root@redflag ~]# 

   [root@redflag ~]# jobs ; bg %1 ; jobs

    [1]+ Stopped         find / -perm + 7000

    [1]+ find / -perm +7000 &

    [1]+ Running         find / -perm +7000 &

    此时Stopped变成了Running,命令行的最后多了一个&符号,表示该作业在后台启动了。

注意:1-5操作过程中“%jobnumber”可以将“%”省略直接加jobnumber即可。

管理后台作业:kill

   [root@redflag ~]# kill –signal %jobnumber

   [root@redflag ~]# kill –l

    参数:

    -l:列出当前kill能够使用的信号(注意是小写L)

    -1:重新读取一次参数的设置文件(类似reload)   ---对应的信号为SIGHUP

     -2:表示与由键盘输入ctrl+c同样的动作         ---对应的信号为SIGINT

     -9:立刻强制删除一个作业                    ---对应的信号为SIGKILL

     -15:以正常方式终止一项作业                 ---对应的信号为SIGTERM 

      [root@redflag ~]# jobs

    [1]+ Stopped         vim bashrc

   [root@redflag ~]# kill -9 %1             #以强制方式删除

   [1]+ 已删除          vim bashrc     

   [root@redflag ~]# kill –SIGTERM %1      #-SIGTERM与15是一样的

注意:kill可以帮我们将信号传送给某个作业(%jobnumber)或者是某个PID(直接输入数字),也就是说,kill后面直接加数字与加上%的情况是不同的。

vmstat -s: 内存的汇总信息

procs项目
r等待运行的进程的个数,和核心数有关
b处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
swap项目
si从磁盘交换进内存的数据速率(kb/s)
so从内存交换至磁盘的数据速率(kb/s)
io项目
bi从块设备读入数据到内存的速率(kb/s)    读
bo从内存写入磁盘的速率(kb/s)            写
memory项目
swad交换内存的使用总量
free空闲物理内存总量
buffer用于buffer的内存总量
cache用于cache的内存总量
system项目
in: interrupts中断速率
cs: context switch进程切换速率
cpu项目
us用户空间占用的比例
sy内核空间占用的比例
id空闲空间占用的比例
wa等待IO完成所消耗的时间比例
st被虚拟化技术偷走的时间比例

htop:

f1帮助

f2切换CPU、mem、swap显示方式

f10退出

    常用选项:

       -d #: 指定延迟时间;

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

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

   命令:

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

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

       a:将选定的进程绑定至某指定CPU核心;

       t: 显示进程树

top:

Tasks

total进程总数
running运行进程数
sleeping休眠态进程数
stopped停止态进程数
zobie僵死态进程数

%Cpu(s)

us(user space)用户空间占用CPU百分比
sy(system)内核空间占用CPU百分比   注:高负载时:us:sy=7:3
ni(nice)修改nice值占用的CPU百分比
id(idle) 空闲的CPU百分比
wa(wait) 等待IO完成占用的CPU百分比
hi(hardware interrupt) 硬中断占用CPU百分比
si(software interrupt)软中断占用CPU百分比
st(stole)被偷走的CPU,比如VMware
buffer(缓冲)元数据
cache(缓存)数据
PID进程号
USER进程发起者
PR(priority)优先级
NI(Nice)nice值
VIRT虚拟内存集
RES常驻内存集
SHR共享内存集
S(status)状态
%CPUCPU占用比
%MEM内存占用比
TIME+运行时长
COMMAND启动进程

对显示排序的方法:

P占据的CPU百分比
M占据内存百分比
T累积占据CPU时长

首部信息显示:

luptime信息
ttasks及cpu信息
#数字cpu分别显示
mmemory信息
s修改刷新时间间隔
Esc退出
k终止指定进程
W保存文件
q退出命令

进程管理命令之ps

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

   ps [OPTION]…

       选项:支持两种风格

           常用组合:aux

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

                   a: 与终端相关的进程;

                   x: 与终端无关的进程;

~]# ps aux

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT TART   TIME COMMAND

USER运行进程的用户
PID进程ID
%CPU占用CPU
%MEM占用内存
VSZ虚拟内存集
RSS实际内存集
TTY终端信息
STAT进程状态
START进程状态
TIME运行时间
COMMAND进程名称

           常用组合:-ef

           e: 显示所有进程

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

           常用组合:-eFH

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

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

STAT列的标志

S 睡眠。通常是在等待某个事件的发生,如一个信号或有输入可用
R       运行。 严格来说,应是“可运行”,即在运行队列中,处于正在执行或即将运行状态
D       不可中断的睡眠(等待)。通常是在等待输入或输出完成
T       (terminate)停止。通常是被shell作业控制所停止,或者进程正处于调试器的控制之下
Z       (zombie)僵尸进程,通常是该进程已经死亡,但父进程没有调用wait类函数来释放该进程的资源
N (nice)低优先级任务
s       进程是会话期首进程
+       进程属于前台进程组
l       进程是多线程的

<       高优先级任务

pstree: 进程树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路途…

点滴记录

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值