一、&
应用场景:
把占用终端的任务丢到后台运行,前台可以继续操作其他任务。
将命令丢到后台运行,避免终端占用,避免Ctrl+c中断任务。
1、执行&,会返回一个job number和PID,如[2]- 37314,
- [2]代表此时后台执行第几个任务,37314是进程PID;
- 其中的+ - 符号,+代表最近被放到后台中的,-代表最新第二个被放到后台中的,第三个以后就不会有+ -;
- 任务完成后会返回[2]- Done;
2、数据流,当有stdout和stderr时会输出影响前台屏幕,这时就要用到数据流重定向:python3 autodeploy.py >/tmp/log.txt 2>&1 &
拆分成四部分:(执行的命令)+ (>/tmp/log.txt)+ (2>&1)+ (&)
- 2>&1,2是标准错误stderr,1是标准输出stdout,(0是标准输入),将标准错误重定向到标准输出,>&是固定搭配;
- >/tmp/log.txt,实际上是 1>/tmp/log.txt的简写,将标准输出传到/tmp/log.txt,
>表示覆盖,>>表示追加- &后台运行
3、&是将命令丢到后台运行,如果想将命令丢到后台暂停呢?就需要用到Ctrl-z
应用场景:当正在vim编辑一个文件,但是又想要查询一个东西,正常是先退出vim再查询,如果用Ctrl-z就方便多了,只要将vim暂时丢到后台等待即可;
jobs命令,查看当前终端后台的任务,jobs -lrs -l显示PID,-r正在运行的,-s暂停的;
fg命令,将后台任务拿到前台运行,fg %1,就是将job number为1的任务拿到前台执行;
bg命令,将后台任务在后台运行,bg %1
二、nohup
应用场景:
&是将任务放到后台执行,但是如果脱机或者注销系统后任务不会继续执行,如果想实现继续执行就要用到nohup,因此nohup常和&搭配使用:
nohup 命令及参数 &
三、总结
&,后台运行
nohup,脱机或者注销后仍然执行
二者搭配使用,
如果只用&,脱机或者注销后任务停止;
如果只用nohup,占用终端,Ctrl-c后任务停止