Linux 前后台作业控制及管理
一、基本概念
前台作业:通过终端启动,且启动后一直占据终端(如:键盘、屏幕),用户必须等待其执行完成后才能继续输入新命令。
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端,无法直接接收键盘输入),可能输出信息到终端。用户可以在作业运行的同时,继续在终端执行其他命令。
二、作业管理
1、作业运行于后台
运行中的作业: Ctrl+z
尚未启动的作业: COMMAND &
后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系,则用下面的方式(常用nohup)
nohup COMMAND &>/dev/null &
screen;COMMAND
tmux;COMMAND
2、作业控制
fg [[%]JOB_NUM] :把指定的后台作业调回前台
bg [[%]JOB_NUM] :让送往后台的作业在后台继续运行
kill [%JOB_NUM] :终止指定的作业
3、操作示例
ping 进程提交到后台执行([1]是作业号 job id,8816 是进程 pid ,若有输出信息会打印在终端前台)
Runnning
(运行中)、Stopped
(暂停)、Done
(已完成))
将后台作业转为前台
暂停作业(ctrl+z)
让其继续转为后台执行(状态由 Stopped 转为 Running)
终止后台进程(有提示)
提交到后台,且脱离终端独立持久运行(默认情况下,会将所有信息输出到当前目录下的文件 nohup.out 中)
配合文件描述符,可选择输出内容(标准输出和错误都写入文件 ping.log )
三、前后台作业区别对比
维度 | 前台作业 | 后台作业 |
---|---|---|
终端控制 | 完全占据,执行结束前无法输入新命令 | 不占据终端控制权,可同时执行其他命令 |
输入交互 | 可直接接收 | 无法接收 |
输出交互 | 结果直接输出到终端屏幕 | 默认输入到终端(可重定向到文件减少干扰) |
终止 | ctrl+c | kill命令 |
终端依赖 | 终端关闭,则作业终止 | 普通后台依赖终端(终端关闭则作业终止); nohup可脱离终端独立运行 |
运行状态 | 实时显示到终端屏幕 | 须通过 jobs,ps 等命令查看 |