在linux系统中在后台以作业形式运行命令
通过给命令行附加一个”&”字符,任何指定的命令也可以在后台运行.通常,只有那些不需要键盘输入而且不
会生成大量输出的长时间运行的命令才适合在后台运行.当bash shell在后台运行命令时,该命令被称为作
业(job),被分配一个作业号码.
[root@sidatabase oradata]# cp system20130708.dmp / > cp.txt 2> /dev/null & [1] 20629
在后台启动作业后,bash shell向用户报告了两条信息:第一条是作业号码,出现在方括号中;
第二条是后台作业的进程id.上面的信息说明该作业的作业号码为1,cp命令的进程id为20629
用jobs命令列出当前作业
[root@sidatabase /]# jobs [1]+ Running cp -i system20130708.dmp / > cp.txt 2> /dev/null & (wd: /oracle/oradata)
他的每个后台作业都和作业号码一起列出.最新操作的作业被作为当前作业,在jobs命令输出中用一个”+”修饰.
用fg命令把作业置于前台
可以用fg内置命令把后台作业置于前台运行.fg命令用作业号作为参数,如果没有提供任何作业号码,将在前台运行当前
作业.
[root@sidatabase oradata]# fg 1 cp -i system20130708.dmp / > cp.txt 2> /dev/null
cp -i system20130708.dmp / > cp.txt 2> /dev/null正在前台运行,因此,当进程仍在运行时,shell不会发送打印提示
符.
用ctrl+z挂起前台作业
ctrl+z控制组合键是挂起进程的一种方法.当用户挂起前台命令时,仔细观察bash shell的输出,会发现bash shell把任何
挂起的前台进程都看成作业.
[root@sidatabase oradata]# fg 1 cp -i system20130708.dmp / > cp.txt 2> /dev/null ^Z [1]+ Stopped cp -i system20130708.dmp / > cp.txt 2> /dev/null [root@sidatabase oradata]# jobs [1]+ Stopped cp -i system20130708.dmp / > cp.txt 2> /dev/null [root@sidatabase oradata]# ps u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 3297 0.0 0.0 4056 544 tty2 Ss+ Aug09 0:00 /sbin/mingetty root 3299 0.0 0.0 4056 540 tty3 Ss+ Aug09 0:00 /sbin/mingetty root 3301 0.0 0.0 4056 540 tty4 Ss+ Aug09 0:00 /sbin/mingetty root 3303 0.0 0.0 4056 540 tty5 Ss+ Aug09 0:00 /sbin/mingetty root 3305 0.0 0.0 4056 544 tty6 Ss+ Aug09 0:00 /sbin/mingetty root 3345 0.0 0.0 129680 25964 tty1 Ss+ Aug09 5:39 /usr/bin/Xorg : root 6828 0.0 0.0 108452 1932 pts/0 Ss 08:46 0:00 -bash root 25925 37.0 0.0 113636 896 pts/0 T 11:12 1:36 cp -i system201 root 27324 12.0 0.0 110232 1168 pts/0 R+ 11:16 0:00 ps u
当进程被挂起(即被停止)时,被分配给一个作业号码(如果没有的话),并被置于后台.jobs命令把该作业报告成”停止的”
作业.ps命令确定进程处于停止(挂起)状态.
重新启动挂起在后台的作业
挂起在后台的作业可以用bg内置命令重新启动.像fg命令一样,bg命令把作业号码作为参数,或者,如果没有提供任何
作业号码,就使用当前作业
[root@sidatabase oradata]# bg 1 [1]+ cp -i system20130708.dmp / > cp.txt 2> /dev/null & [root@sidatabase oradata]# jobs [1]+ Running cp -i system20130708.dmp / > cp.txt 2> /dev/null & [root@sidatabase oradata]#
作业号码1现在再次处于运行状态