Linux中后台执行任务

时间:2021-09-20 02:23:25

执行时, 可以在命令最后添加 & 使其后台执行, 但是其输出依然会显示, 而且其运行是和当前shell绑定的

如果脚本已经运行,  可以使用Ctrl-Z暂停, 然后使用 bg 让其转入后台, 再 disown 解除关联, 例如:

^Z
[]+ Stopped make -j2
[tomcat@n00 master]$ bg
[]+ make -j2 &
# 注意: disown之后, 此任务将不出现于jobs, 也不能再转回前台, 但是输出依然是和当前shell绑定的
[tomcat@n00 master]$ disown
[tomcat@n00 master]$ exit

查看在后台运行的任务

jobs -l
# -l: 用于显示任务的 process id

将后台任务转回前台

%process-id
# or
fg process-id

如果要在屏显的同时记录日志, 通过tee命令

$ make -j2 | tee output.log

对于需要在关闭shell后还需要继续执行的任务, 需要使用nohup, 例如

nohup make -j1 TARGET_DEVICES=y1 > ~/openwrt/logs/.log >& &
# 其中执行的命令是"make -j1 TARGET_DEVICES=y1"

上面的命令会将输入记录到log文件.  对于上面的命令的解释:

bash 中 0, 1, 2 三个数字分别代表 STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO, 即标准输入(一般是键盘), 标准输出(一般是用户终端控制台), 标准错误(出错信息输出)

0 标准输入 (一般是键盘)
1 标准输出 (一般是用户终端控制台)
2 标准错误 (出错信息输出)

输入重定向, 例如 cat < test.c 将 test.c 重定向为 cat 命令的输入源.

输出重定向, 用其他输出目标替换标准输出, 例如 ls > 1.txt 将 ls 的结果从标准输出重定向为 1.txt 文本. 有时候会看到如 ls >> 1.txt这类的写法, >> 的区别在于 > 用于新建而 >> 用于追加, 即 ls > 1.txt 会新建一个 1.txt 文件并且将 ls 的内容输出到新建的 1.txt 中, 而 ls >> 1.txt 则用在 1.txt 已经存在而我们只是想将 ls 的内容追加到 1.txt 文本中的时候