shell入门教程(1)-shell基础 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/43795131
shell入门教程(2)-变量和参数 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/44081993
shell入门教程(3)-命令编辑 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/44617445
shell入门教程(4)-作业控制 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/46801163
SHELL入门教程(5)-算术运算 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025297
SHELL入门教程(6)-环境 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025321
SHELL入门教程(7)-编写脚本 - justkk的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/justkk/article/details/47025397
1、概述
作业控制包括暂停或继续进程的执行,在前台与后台之间切换作业,查看作业运行状态等。
前台执行的作业受到键盘产生的信号的影响,如 ctrl-c终止,而后台作业不会;
某个时刻只有一个前台执行的作业,可以有多个后台执行的作业;
用户必须等待当前前台执行的作业终止,才能输入下一个命令。
程序是磁盘上的一个可执行文件;
而程序的每次执行对应系统中的一个进程。
一个作业可能包含多个进程,如:ls |wc -l
2、作业控制
前台运行中的作业可以通过组合键ctrl-z暂停,示例:
sleep 100
^Z
[1]+ Stopped sleep 100
此时作业暂停执行。
fg命令把之前暂停或后台执行的作业放到前台继续执行。
bg命令把之前暂停的作业放到后台执行执行。
fg或 bg命令不带参数时操作最近一个作业,也可以使用作业编号指定特定的作业,如%3表示第三个作业。
3、检查作业状态
jobs -l
[1] 9203 Running sleep 100 &
[2]- 9204 Running sleep 101 &
[3]+ 9205 Running sleep 102 &
+ 表示当前作业,-表示前一个作业。可以作为fg命令的参数,如fg –
不带参数时,Shell将等待所有的后台作业执行完毕。
4、后台作业与I/O
后台执行的作业尝试读取键盘输入时将被暂停,示例:
# read a &
[1] 5651
# jobs -l
[1]+ 5651 Stopped (tty input) reada
通常,作业的输出信息显示在屏幕上,即使作业在后台执行。这可能不是你希望的,此时可以重定向到文件。
nohup命令也可以重定向后台作业的输出结果,它同时重定向其标准输出与标准错误输出,结果文件命名为nohup.out。
nohup的额外作用是在用户注销时避免作业终止,保持作业继续运行,如:
nohup find / -name core -print &
5、作业名称
可以使用多种方式引用一个作业,如:作业号、进程号、+-、作业的全部或部分名称。
假定有这些作业:
[1] 6062 Running sleep 300 &
[2]- 6063 Running sleep 400 &
[3]+ 6064 Running sleep 500 &
那么下面这些方式都表示 sleep 500这个作业:
%3 %+ $?500
6、离开暂停的作业
如果当前有暂停的作业,用户注销时,Shell会提示:
There are stopped jobs.
提示你检查并处理暂停的作业;
如果忽略这个提示,继续注销,那么暂停的作业将被终止。