1.工作管理
Linux下的工作管理指的是,当我们通过tty*登录系统并取得shell之后,我们在shell下同时进行多个工作的行为管理。
2.工作管理的方式
在Linux下工作管理有如下几种方式:
a)&:直接将命令丢到后台中“执行”
在一个命令的字符串后加上&,就可以了。例如,tar -zpcf /tmp/etc.tar.gz /etc &
当使用&进行工作管理时,命令并丢到后台中执行,此时shell会给予这个命令一个“工作号码(job number)”。当这个命令在后台被执行完成之后,就会将执行结果输出到屏幕上。为了避免影响工作,我们可以使用数据流重定向的方法来解决这个问题。
Remarks:这里的工作号码job control只与你自己当前的shell环境有关。
b)Ctrl+z:将目前的工作丢到后台中“暂停”
当在执行某个命令的过程中,通过Ctrl+z快捷键,就可以将当前命令丢到后台中“暂停”了。
3.查看工作管理机制下面的job工作状态
查看job的工作状态可以通过jobs命令来查看。
[n]中括号里面的数字n表示的是工作号码job number。其中加号+表示最近被放到后台中的工作号码,也是工作管理相关操作命令默认取用的工作。减号-代表最近最后第二个被放置到后台中的工作号码。而超过最后第三个以后的工作,就不会有+/-符号存在了。
4.工作管理的相关的操作命令
a)fg:将后台工作拿到前台来处理
通过fg %jobnumber将第jobnumber号工作放到前台来执行。也可以使用fg +或者fg -来将+/-号命令取到前台来执行。
b)bg:让工作在后台下的状态由暂停变成运行中
通过bg %jobnumber将第jobnumber号工作在后台中变成运行中的状态。也可以使用bg +或者bg -来将+/-号命令在后台中有暂停状态变成运行中状态。
c)kill:使用kill命令向某个工作发送管理信号
通过kill -signal %jobnumber向指定工作号码的工作发送管理信号。例如-9表示通常是在强制删除一个不正常的工作时所使用。-15则是以正常步骤结束一项工作。
Remarks:kill -signal num,不加%号表示的是向第num号进程发送管理信号。
5.nohup [命令与参数]与nohup [命令与参数] &
使用&或者Ctrl+z来进行工作管理时,这些工作放到后台了,但这些工作仍然是当前shell进程的子进程,当当前终端机tty退出后,所有的子进程也就是工作会被终止。也就是当我们退出账号登陆时,就是这个情况,我们后台的工作都会终止了。
解决上述这个问题,可以通过nohup [命令与参数]或者nohup [命令与参数] &来解决。我认为通过nohup可以将后台工作直接变成和shell进程平起平坐的进程了,也就是不再是当前shell进程的子进程了。当当前用户退出终端机后,工作还会在linux系统上。nohup会将标准输出和标准错误输出都默认写入到./nohup.out文件中,当然我们也可以使用重定向输出到其他文件中,例如nohup command > log.txt 2>&1 &
备注:nohup是指运行一个命令,让这个命令的执行进程忽略来自操作系统的Hangup信号。因为当用户通过ssh/telnet远程登录系统时,当主动或被动地断开终端机时,操作系统就会向该终端机下所有的进程发送Hangup信号,让他们终止运行。如果使用nohup执行命令,那么就会让进程忽略Hangup信号,然后继续运行。