Linux 前后台作业切换及脱机管理

Linux bash shell单一终端界面下,我们经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务。所有的上述的这些工作我们可以在一个bash内实现,也就是说在同一个终端窗口完成。下面主要描述了Linux下前后台作业切换与管理以及作业在脱机的情形下如何管理。

1、前后台作业的定义前后台作业实际上对应的也就是前后台进程,因此也就有对应的pid。在这里我们统称为作业。无论是前台作业还是后台作业,两者都来自当前的shell,是当前shell的子程序。下面是两者的定义。前台作业:可以由用户参与交互及控制的作业我们称之为前台作业。后台作业:在内存可以自运行的作业,用户无法参与交互以及使用[ctrl]+c来终止,只能通过bg或fg来调用该作业。

2、几个常用的作业命令a、command & 直接让作业进入后台运行b、[ctrl]+z 将当前作业切换到后台c、jobs 查看后台作业状态d、fg %n 让后台运行的作业n切换到前台来d、bg %n 让指定的作业n在后台运行e、kill %n 移除指定的作业n”n” 为jobs命令查看到的job编号,不是进程id。每一个job会有一个对应的job编号,编号在当前的终端从1开始分配。job 编号的使用样式为[n],后面可能会跟有 “+” 号或者 “-” 号,或者什么也不跟。”+” 号表示最近的一个job,”-” 号表示倒数第二个被执行的Job。注,”+” 号与 “-” 号会随着作业的完成或添加而动态发生变化。通过jobs方式来管理作业,当前终端的作业在其他终端不可见。

3、演示后台作业命令

a、直接将作业放入到后台(附加 & 符号)robin@SZDB:/tmp> tar -czvf temp.tar.gz tempSYBO2SZ.dbf &[1] 12500robin@SZDB:/tmp> tempSYBO2SZ.dbf

robin@SZDB:/tmp> #此时可进行其它操作,作业一旦完成,会弹出如下的提示 [1]+ Done tar -czvf temp.tar.gz tempSYBO2SZ.dbf

robin@SZDB:/tmp> ls -hltr temp*-rwxr-xr-x 1 robin oinstall 490M 2013-05-02 17:48 tempSYBO2SZ.dbf-rw-r–r– 1 robin oinstall 174M 2013-05-02 17:50 temp.tar.gz

b、已经开始执行,但需要放入后台(使用[ctrl]+z)robin@SZDB:/tmp> tar -czvf temp2.tar.gz tempSYBO2SZ.dbf tempSYBO2SZ.dbf

[1]+ Stopped tar -czvf temp2.tar.gz tempSYBO2SZ.dbfrobin@SZDB:/tmp> jobs[1]+ Stopped tar -czvf temp2.tar.gz tempSYBO2SZ.dbf

#下面同时发布两个作业,并且在中途按下[ctrl]+z以便将当前作业提交到后台robin@SZDB:/tmp> find /u02 -type f -size +100000k robin@SZDB:/tmp> find / -type f -size +100000k

#再次查看当前的jobs时,jobs管理器里出现了3个处于stopp状态的jobrobin@SZDB:/tmp> jobs[1] Stopped tar -czvf temp2.tar.gz tempSYBO2SZ.dbf[2]- Stopped find / -type f -size +100000k[3]+ Stopped find /u02 -type f -size +100000k

robin@SZDB:/tmp> jobs -l #使用-l参数查看当前shell下所有的作业以及对应的job number,进程pid[1] 32682 Stopped tar -czvf temp2.tar.gz tempSYBO2SZ.dbf[2]- 32687 Stopped find /u02 -type f -size +100000k[3]+ 32707 Stopped find / -type f -size +100000k

#下面通过pid可以查看到对应的进程信息robin@SZDB:/tmp> ps -ef | grep 32707 | grep -v greprobin 32707 32095 0 09:48 pts/1 00:00:00 find / -type f -size +100000 robin@SZDB:/tmp> tty #当前终端的信息为pts/1/dev/pts/1

#打开另外一个终端robin@SZDB:~> tty/dev/pts/3robin@SZDB:~> jobs #此时可以看到jobs命令无任何返回robin@SZDB:~> ps -ef | grep 32707 | grep -v grep #仅仅根据进程id可以找到对应的作业robin 32707 32095 0 09:48 pts/1 00:00:00 find / -type f -size +100000

#由上可知,对于当前shell下的jobs,,仅当前shell(终端)可见

c、将后台作业切换到前台(fg命令)robin@SZDB:/tmp> fg #省略Job number的情形,则将缺省的job切换到前台find / -type f -size +100000k/u02/database/old/CNMMBOBK/undo/undotbsCNMMBOBK.dbf……[ctrl]+zrobin@SZDB:/tmp> fg %1tar -czvf temp2.tar.gz tempSYBO2SZ.dbfrobin@SZDB:/tmp> jobs[2]- Stopped find /u02 -type f -size +100000k[3]+ Stopped find / -type f -size +100000k

d、运行后台中暂停的作业(bg命令)#前面有2个job处于stopped状态,现在我们让其在后台运行,直接输入bg命令则缺省的job继续运行,否则输入job编号,运行指定的jobrobin@SZDB:/tmp> bg 2 #输入bg 2之后,可以看到原来的命令后被追加了&[2]- find /u02 -type f -size +100000k & robin@SZDB:/tmp> jobs[2]- Running find /u02 -type f -size +100000k &[3]+ Stopped find / -type f -size +100000k

后来逐渐有广州花城的,

Linux 前后台作业切换及脱机管理

相关文章:

你感兴趣的文章:

标签云: