Linux中后台执行任务
执行时, 可以在命令最后添加 & 使其后台执行, 但是其输出依然会显示, 而且其运行是和当前shell绑定的
如果脚本已经运行, 可以使用Ctrl-Z暂停, 然后使用 bg 让其转入后台, 再 disown 解除关联, 例如:
^Z [1]+ Stopped make -j2 [tomcat@n00 master]$ bg [1]+ 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/20170115.log 2>&1 & # 其中执行的命令是"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 文本中的时候