工作管理
工作管理是在单一终端机接口处同时进行多个工作的行为管理,其实同时开启多个终端机一样能同时完成多个任务,但是由于某些情况下可能限制用户只能开启一个终端机接口,此时就要用工作管理。
在进行工作管理时,所有的工作都是当前bash的子进程,当前的工作管理无法从终端tty1管理tty2,进行工作管理有几个限制条件:
1、 这些工作所触发的进程必须来源于当前shell的子进程;
2、 可以放入背景运行的工作不能等待系统交互,也不能用ctrl+c终止;
丢到背景执行:&
在执行的命令后加&可以直接将任务放在后台执行,执行这条语句后前台会打印一个用中括号括起来的job号码和指令触发的PID,有时虽然任务被放到后台,但是输出信息还是会挤满前景,此时可以将输出信息重定向到一个文件中,然后放入后台执行,这样可以保证其他指令输入时不被打断:
tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
丢到背景中暂停执行:ctrl+z
按ctrl+z可以将命令放在背景中,执行后会出现中括号括起来的job号码。
控制job的运行
显示后台运行的程序:jobs -l
,-l的意思是显示pid。jobs命令会显示多行,一行代表一个后台工作,行首代表后台工作编号,后面会跟一个+或-,也可能没有符号标记,+代表最后放入后台的工作(也是恢复时首先恢复的),-代表倒数第二个放入后台的工作。每个job都会有对应的状态,Running代表后台运行,Stoppd代表暂停。
恢复后台运行的程序:fg %工作号
不加%代表恢复+对应的后台工作。
让后台暂停的工作恢复到后台执行:bg %工作号
(这个命令必须不能和前台有交互才能恢复到后台执行,如top)
强制移除后台任务:kill -9 %job号
,正常结束后台任务:kill -15 %job号
脱机管理
之前的所有放入后台的程序仅仅是将任务放到当前bash的背景下运行,而不是放到系统的背景中运行,也就是说远程连接到linux将任务放到背景中执行,断开和linux的连接会导致这些任务中断,如果想断开连接后继续生效,可以用at指令,也可以用nohup指令:nohup 命令 &
这个指令的效果就相当于放入后台执行,只不过退出登录后依然在执行,但是注意nohup不支持bash内建的命令。