linux进程管理:进程,程序,线程 & 9个进程管理工具 & 作业控制

程序

程序:一组指令以及参数集合,按照相应的逻辑控制计算机完成特性任务

(一个程序可以产生多个进程)

linux程序:系统,用户,固件

(包含指令,参数)

程序 ------》系统调用-------》缓存(内存) -------》cpu处理 执行任务

特点:静态的,封闭的

进程

程序 -------运行-------》进程1,进程2,进程3,…

进程:运行的程序,(动态),

(1)动态

(2)有生命周期

(3)运行状态

(4)是操作系统上的基本单位 (从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。)

(5)特点:并发性,交互性

扩展:

应用(应用程序)

|

内核(内核文件,内核模块,驱动程序)

| 固件(芯片+程序)

硬件

(1)操作系统以进程为单位分配系统资源

(2)每一个进程运行是独立的,

(3)具有独立的地址空间,运行状态

(4)多个程序同时运行,每一个程序就是一个进程

线程

进程 -------线程1,线程2,线程3,…-------》线程 把整个任务完成以后才能运行。

扩展:

(linux:进程,线程-------》都有独立的资源集),入口,序列,出口。

线程:

(1)一个进程可有多个线程,一个线程只能为一个进程所拥有

(2)线程无法独立运行,

程序和进程的区别

(1)程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程

(2)进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程

(3)进程还具有并发性和交往性,而程序却是封闭的

进程和线程的区别

(1)一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有

(2)线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行

进程的生命周期

父进程 -------》子进程------》子进程

子进程拥有父进程的权限,资源(特性),子进程可以运行自己的程序(exec),运行完退出(exit),然后唤醒父进程。如果这时子进程还有子进程还存在,就变成僵尸进程

父子进程的关系

子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程 在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。父进程终止子进程自然终止。

子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。

检测各种服务(service)的启动状态

该命令主要用于管理Linux操作系统中各种服务,它是一个脚本命令,会调用/etc/init.d/下面的各种服务启动程序。

service SERVER status

OR

/etc/init.d/SERVER status

[root@CentOS6 etc]# service crond status
crond (pid  1373) is running...

查看所有服务的状态

命令service –status-all 将会运行所有的启动脚本来显示各个服务的运行状态:

进程的管理工具 —9个

Linux进程管理工具pstree,ps、pgrep, pkill、uptime、top、htop、vmstat、lsof。

1. pstree

进程树 查看进程之间的关系

-p :显示pid

-u :显示用户

yum install pstree (CentOS6)

yum install psmsic (CentOS7)

[root@localhost ~]# pstree
init─┬─auditd───{auditd}
     ├─crond
     ├─login───bash
     ├─master─┬─pickup
     │        └─qmgr
     ├─5*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd─┬─sshd───bash───pstree
     │      └─sshd───sftp-server
     └─udevd───2*[udevd]

2. ps

a :显示所有进程 -u :显示以用户为主的进程 x :和au配合使用,显示完整信息 -l :较长、较详细的将该PID 的的信息列出

[root@CentOS6 ~]# ps -a
   PID TTY          TIME CMD
  1701 pts/0    00:00:00 ps
[root@CentOS6 ~]# ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       1388  0.0  0.0   4064   592 tty2     Ss+  19:39   0:00 /sbin/mingetty
root       1390  0.0  0.0   4064   592 tty3     Ss+  19:39   0:00 /sbin/mingetty
root       1392  0.0  0.0   4064   592 tty4     Ss+  19:39   0:00 /sbin/mingetty
root       1394  0.0  0.0   4064   592 tty5     Ss+  19:39   0:00 /sbin/mingetty
root       1396  0.0  0.0   4064   592 tty6     Ss+  19:39   0:00 /sbin/mingetty
root       1410  0.0  0.1 108316  1944 tty1     Ss+  19:40   0:00 -bash
root       1438  0.0  0.1 108316  1976 pts/0    Ss   19:49   0:00 -bash
root       1702  0.0  0.1 110244  1184 pts/0    R+   21:09   0:00 ps -u

USER:该进程属于那个使用者账号。

PID :该进程的进程ID号。

%CPU:该进程使用掉的 CPU 资源百分比;

%MEM:该进程所占用的物理内存百分比;

VSZ :该进程使用掉的虚拟内存量 (Kbytes)

RSS :该进程占用的固定的内存量 (Kbytes)

TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

STAT:该程序目前的状态,主要的状态有:

R :该程序目前正在运作,或者是可被运作;

S :该程序目前正在睡眠当中,但可被某些讯号(signal) 唤醒。

T :该程序目前正在侦测或者是停止了;

Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态

START:该进程被触发启动的时间;

TIME :该进程实际使用 CPU 运作的时间。

COMMAND:该程序的实际指令。

[root@CentOS6 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   1438   1429  0  80   0 - 27079 wait   pts/0    00:00:00 bash
4 R     0   1704   1438  0  80   0 - 27035 -      pts/0    00:00:00 ps

F :代表这个程序的旗标 (flag),4 代表使用者为 superuser;.

S :代表这个程序的状态 (STAT);sleeping,running

UID :代表执行者身份 # PID 进程的ID号!

PPID :父进程的ID;

C :CPU使用的资源百分比

PRI :指进程的执行优先权(Priority的简写),其值越小越早被执行;

NI :这个进程的nice值,其表示进程可被执行的优先级的修正数值。

ADDR :这个是内核函数,指出该程序在内存的那个部分。如果是个执行的程序,一般就是『 - 』

SZ :使用掉的内存大小;

WCHAN :目前这个程序是否正在运作当中,若为 - 表示正在运作;

TTY :登入者的终端机位置;# TIME 使用掉的 CPU 时间。

CMD :所下达的指令名称

3. pgrep

经常要查看进程的信息,包括进程的是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。pgrep通过匹配其程序名,找到匹配的进程

-l 同时显示进程名和PID

-o 当匹配多个进程时,显示进程号最小的那个

-n 当匹配多个进程时,显示进程号最大的那个

注:进程号越大,并不一定意味着进程的启动时间越晚

[root@CentOS6 /]# pgrep sshd
1348
1429
1434
[root@CentOS6 /]# pgrep -l sshd
1348 sshd
1429 sshd
1434 sshd
[root@CentOS6 /]# pgrep -l -o sshd
1348 sshd
[root@CentOS6 /]# pgrep -o sshd
1348
[root@CentOS6 /]# pgrep -l -n sshd
1434 sshd

4.kill

linux中的kill命令用来终止指定的进程的运行,是linux下进程管理的常用命令。可以使用kill命令杀死指定进程PID的I进程,如果要找到我们需要杀死的进程,还需要在之前使用ps等命令再配合grep来查找进程。

通常,终止一个前台进程可以使用Ctrl+c 键,但是,对于一个后台进程就必须用kill命令来终止,我们就需要先使用 ps /pidof /pstree /top等工具获取进程PID,然后使用kill命令来杀掉进程。

kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。

kill [选项] [进程id]

-l :信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称

**-a :**当处理当前进程时,不限制命令名和进程号的对应关系

**-p :**指定kill 命令只打印相关进程的进程号,而不发送任何信号

-s :指定发送信号

-u :指定用户

(1)kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:

kill -2 123

#它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。

(2)应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入killall 或者 kill 0 。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用killall,kill 0 来终止所有由当前shell启动的进程,是个有效的方法。在这里注意:kill 0 中 0不代表信号ID。(3)kill 0 不发送任何信号,常用来检测进程是否存在,在脚本中echo$?,存在返回0,不存在返回1。

4.1 列出所有信号名称:

[root@CentOS6 ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

说明: 只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。下面是常用的信号:

HUP        1      终端断线
INT        2      中断(同 Ctrl + C)
QUIT       3      退出(同 Ctrl + \)
TERM       15    终止
KILL       9      强制终止
CONT       18    继续(与STOP相反, fg/bg命令)
STOP       19     暂停(同 Ctrl + Z)

4.2 先用ps查找进程,然后用kill杀掉

[root@CentOs7 ~]# ps -ef |grep vim
root       7755   7737  0 14:50 pts/1    00:00:00 grep --color=auto vim
[root@CentOs7 ~]# kill 7755

4.3 彻底杀死进程

kill -9 7755 # -9 强制杀掉进程

5.killall

用于杀死指定名字的进程

-Z :只杀死拥有scontext 的进程

-e :要求匹配进程名称

-I :忽略小写

-g :杀死进程组而不是进程

-i :交互模式,杀死进程前先询问用户

-l :列出所有的已知信号名称

-q :不输出警告信息

-s :发送指定的信号

-v :报告信号是否成功发送

-w :等待进程死亡

–help :显示帮助信息

–version :显示版本显示

杀死所有同名进程

killall nginx

killall -9 bash

向进程发送指定信号

killall -TERM ngixn 或者 killall -KILL nginx

6. pkill

pkill是ps命令和kill命令的结合,按照进程名来杀死指定进程,pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉、

pkill [选项] [参数]

7.htop

先要安装一个epel源,先搜索epel,然后安装yum install epel-release

[root@CentOS6 ~]# yum list |grep epel
epel-release.noarch                       6-8                         extras
[root@CentOS6 ~]# yum install epel-release

htop相比top其有着很多自身的优势。如下:

两者相比起来,top比较繁琐

默认支持图形界面的鼠标操作

可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行

杀进程时不需要输入进程号等

htop跟top一样,也是打开一个实时的监控界面,直接输入htop命令打开如下图所示界面:

在上图中将输出的界面划分成了四个区域,其中:

上左区域:显示了CPU、物理内存和交换分区的信息;

上右区域:显示了任务数量、平均负载和连接运行时间等信息;

进程区域:显示出当前系统中的所有进程;这里同top显示一致

以上各项分别为:

PID:进行的标识号

USER:运行此进程的用户

PRI:进程的优先级

NI:进程的优先级别值,默认的为0,可以进行调整

VIRT:进程占用的虚拟内存值

RES:进程占用的物理内存值

SHR:进程占用的共享内存值

S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态

%CPU:该进程占用的CPU使用率

%MEM:该进程占用的物理内存和总内存的百分比

TIME+:该进程启动后占用的总的CPU时间

COMMAND:进程启动的启动命令名称

快捷键         快捷键           说明
h, ?           F1            查看htop使用说明
S              F2            htop 设定
/              F3            搜索进程
\              F4            增量进程过滤器
t              F5            显示树形结构
<, >           F6            选择排序方式
[              F7            可减少nice值可以提高对应进程的优先级
]              F8            可增加nice值,降低对应进程的优先级
k              F9            可对进程传递信号
q              F10           结束htop
u                            只显示一个给定的用户的过程
U                            取消标记所有的进程
H                            显示或隐藏用户线程
K                            显示或隐藏内核线程
F                            跟踪进程
P                            按CPU 使用排序
M                            按内存使用排序
T                            按Time+ 使用排序
l                           显示进程打开的文件
I                           倒转排序顺序
s                           选择某进程,按s:用strace追踪进程的系统调用

F1:显示帮助信息

**F2:**配置界面中的显示信息

F3 :搜索进程 在界面下按F3或直接输入”/”就可以直接进入搜索模式,是按照进程名进行搜索的。例如

**F4:**过滤器 相当于模糊查找,不区分大小写,下方输入要搜索的内容后,则界面只显示搜索到的内容,更加方便查看,例如:

**F5:**以树形方式显示

**F6 :**排序方式

**F7,F8:**调整进程nice值

F7表示减小nice值(增大优先级),F8增大nice值(减小优先级),选择某一进程,按F7或F8来增大或减小nice值,nice值范围为-20-19,

**F9:**杀死进程

选择某一进程按F9即可杀死此进程,很方便

F10:退出htop

8. vmstat

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。vmstat的好处:一个是Linux/Unix都支持,二是相比top,可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

[root@CentOS6 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 569324  21580 275176    0    0    18     3   13   11  0  0 99  0  0
[root@CentOS6 ~]# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 569340  21580 275176    0    0    18     3   13   11  0  0 99  0  0
[root@CentOS6 ~]# vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 569340  21580 275176    0    0    18     3   13   11  0  0 99  0  0
 0  0      0 569292  21580 275176    0    0     0     0   12   10  0  0 100  0  0
 0  0      0 569292  21580 275176    0    0     0     0   13   10  0  0 100  0  0
 0  0      0 569292  21580 275176    0    0     0     0   10   10  0  0 100  0  0
 0  0      0 569292  21580 275176    0    0     0     0   10   12  0  0 100  0  0

注意:如果评估CPU,需要重点关注procs项的r列值和CPU想的us、sy、wa列的值

-V:显示vmstat版本信息

-n:只在开始时显示一次各字段名称

-a:显示活跃和非活跃内存

-d:显示各个磁盘相关统计信息

-D:显示磁盘总体信息

-p:显示指定磁盘分区统计信息

-s:显示内存相关统计信息及多种系统活动数量

-m:显示slabinfo

-t:在输出信息的时候也将时间一并输出出来

-S:使用指定单位显示。参数有k、K、m、M,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024bytes)

delay:刷新时间间隔。如果不指定,只显示一条结果

count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷

9.lsof

lsof输出信息含义 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

[root@CentOS6 etc]# lsof
COMMAND    PID   USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1   root  cwd       DIR                8,2     4096          2 /
init         1   root  rtd       DIR                8,2     4096          2 /
init         1   root  txt       REG                8,2   150352     393266 /sbin/init
init         1   root  mem       REG                8,2    65960       2622 /lib64/libnss_files-2.12.so
init         1   root  mem       REG                8,2  1923352       2606 /lib64/libc-2.12.so
init         1   root  mem       REG                8,2    90880         16 /lib64/libgcc_s-4.4.7-20120601.so.1
init         1   root  mem       REG                8,2    43944       2634 /lib64/librt-2.12.so

每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下:

COMMAND:进程的名称

PID:进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等

TYPE:文件类型,如DIR、REG等

(1)DIR:表示目录

(2)CHR:表示字符类型

(3)BLK:块设备类型

(4)UNIX: UNIX 域套接字

(5)FIFO:先进先出 (FIFO) 队列

(6)IPv4:网际协议 (IP) 套接字

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

参数:

lsof abc.txt 显示开启文件abc.txt的进程

lsof -c abc 显示出以字母 abc 开头进程现在打开的文件

lsof -p 1234 列出进程号为1234的进程所打开的文件

lsof -g gname/gid 显示归属gname或gid的进程情况

lsof -u uname/uid 显示归属uname或uid的进程情况

lsof +d /usr/local/ 显示目录下被进程开启的文件

lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长

lsof -d 4 显示使用fd为4的进程

lsof -i 用以显示符合条件的进程情况

lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

46 --> IPv4 or IPv6

protocol --> TCP or UDP

hostname --> Internet host name

hostaddr --> IPv4地址

service --> /etc/service中的 service name (可以不止一个)

port --> 端口号 (可以不止一个)

进程优先级

Linux 进程调度及多任务:

每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,

Linux实际能够运行的进程(和线程数)可以超出实际可用的CPU及核心数量。Linux内核进程调度程序将多个进程在CPU核心上快速切换,从而给用户多个进程在同时运行的印象。

进程优先级划分:【0-139】

【0-99】 有效实时优先级

(值越小,优先级越高)

【100-139】 非有效实时优先级 --------调整 nice 【-20-19】

(值越小,优先级越高)

相对优先级nice :-20 - 19

PR:静态优先级-100

NI:nice值

nice值调整

top “r” --enter;输入PID–enter;输入nice值–enter;

renice 【-20,10】PPID

htop F7(-) F8(+)

[root@CentOS6 ~]# sleep 5000 &
[1] 1859
[root@CentOS6 ~]# renice -20 1859
1859: old priority 0, new priority -20

进程前后台

前台进程:在 shell 提示处理打入命令后,创建一个子进程,运行命令, Shell 等待命令退出,然后返回到对用户给出提示符。这条命令与 Shell 异步运行,即在前台运行,用户在它完成之前不能执行别一个命令 。

后台进程:在 Shell 提示处打入命令,若后随一个 &, Shell 创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与 Shell 同步运行,即在后台运行。“后台进程必须是非交互式的” 。

进程的状态

进程的状态:准备状态,就绪状态,运行状态,阻塞状态,休眠状态,死亡状态

僵尸进程(将死状态):父进程死掉,子进程还在

sleeping :睡眠状态

stopping:停止状态

running:运行状态

zombie:僵死状态

这些状态是实时变化的

作业控制

当我们在Linux的shell中运行程序时,这个程序就可以看成是一个作业了,可以这么说shell控制的是作业,而不是进程,而且shell还可以分前后台对作业进行控制。

进程和作业的区别:

区别:进程是一个程序在一个数据集上的一次执行,而作业是用户提交给系统的一个任务。

关系:一个作业通常包括几个进程,几个进程共同完成一个任务,即作业。

用户提交作业以后,当作业被调度,系统会为作业创建进程,一个进程无法完成时,系统会为这个进程创建子进程。

作业控制:

一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成,Shell可以同时运行一个前台作业和任意多个后台作业,这称为作业控制(Job Control)。

在前台一次只能运行一个作业。

在后台可以运行多个作业

ping 192.168.42.2 > /dev/null 2>&1 & #要把ping的结果输出到一个文件夹里(> /dev/null 2),不然它虽然还是在后台运行,但在前台输出结果;不过不影响前台作业执行

[root@CentOS6 ~]# ping 192.168.42.2 > /dev/null 2>&1 &
[1] 1869
[root@CentOS6 ~]# ps -ef |grep ping
root       1869   1773  0 01:34 pts/1    00:00:00 ping 192.168.42.2
root       1872   1773  0 01:35 pts/1    00:00:00 grep ping
[root@CentOS6 ~]# kill 1869
[root@CentOS6 ~]# ps -ef |grep ping
root       1874   1773  0 01:37 pts/1    00:00:00 grep ping
[1]+  Terminated              ping 192.168.42.2 > /dev/null 2>&1
[root@CentOS6 ~]# ps -ef |grep ping
root       1876   1773  0 01:37 pts/1    00:00:00 grep ping

1.jobs 查看后台作业;与终端,不同终端上的作业要在对应终端上查看。 +:代表最近一个放入后台的作业, -:代表倒数第二个放入后头的作业 (只显示在两个作业上)

[root@CentOS6 ~]# ping 192.168.42.2 > /dev/null 2>&1 &
[1] 1877
[root@CentOS6 ~]# jobs
[1]+  Running                 ping 192.168.42.2 > /dev/null 2>&1 &

2. fg %job编号 :把作业恢复到前台运行起来 3. bg %job编号 :把作业恢复到后台运行起来 4. ctrl + z :让前台的程序挂起 转到后台(让作业处于Stopped状态)

[root@CentOS6 ~]# jobs
[1]-  Running                 ping 192.168.42.2 > /dev/null 2>&1 &
[2]+  Running                 sleep 8000 &
[root@CentOS6 ~]# bg %2
-bash: bg: job 2 already in background
[root@CentOS6 ~]# fg %1
ping 192.168.42.2 > /dev/null 2>&1

^Z
[1]+  Stopped                 ping 192.168.42.2 > /dev/null 2>&1
[root@CentOS6 ~]# jobs
[1]+  Stopped                 ping 192.168.42.2 > /dev/null 2>&1
[2]-  Running                 sleep 8000 &
[root@CentOS6 ~]# bg %1
[1]+ ping 192.168.42.2 > /dev/null 2>&1 &
[root@CentOS6 ~]# jobs
[1]-  Running                 ping 192.168.42.2 > /dev/null 2>&1 &
[2]+  Running                 sleep 8000 &

5. kill %job编号 :先停止,在杀死。 ping 192.168.42.2 & 已经在后台运行,在前台输出结果;不影响前台作业执行

[root@CentOS6 ~]# ping 8.8.8.8 &
[3] 1928
[root@CentOS6 ~]# PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=125 ms
l64 bytes from 8.8.8.8: icmp_seq=3 ttl=128 time=74.2 ms
s
aaa                                           passwd
anaconda-ks.cfg                               ping.sh
ansible-2.4.2.0-2.el7.noarch.rpm              pub
apache-tomcat-8.0.36.tar.gz                   tar
centos-release-scl-2-3.el7.centos.noarch.rpm  TECH
eth0                                          TECH-1
file1                                         test
install.log                                   test1.sh
install.log.syslog                            time.log
jdk-8u161-linux-x64.tar.gz                    time.sh
kkk                                           txt
messages                                      wget-log
[root@CentOS6 ~]# 64 bytes from 8.8.8.8: icmp_seq=4 ttl=128 time=71.9 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=128 time=72.6 ms
64 bytes from 8.8.8.8: icmp_seq=32 ttl=128 time=73.4 ms
k64 bytes from 8.8.8.8: icmp_seq=33 ttl=128 time=73.6 ms
ill64 bytes from 8.8.8.8: icmp_seq=34 ttl=128 time=73.3 ms
64 bytes from 8.8.8.8: icmp_seq=35 ttl=128 time=73.7 ms
 64 bytes from 8.8.8.8: icmp_seq=36 ttl=128 time=73.7 ms
%64 bytes from 8.8.8.8: icmp_seq=37 ttl=128 time=73.1 ms
364 bytes from 8.8.8.8: icmp_seq=38 ttl=128 time=72.8 ms
(0)

相关推荐