shell中执行命令追加2>err&为什么可以让脚本在后台运行?
命令
test.py 2>err& 含义说明 这个命令可以拆分成三个独立的shell语法部分分别理解:
- 开头的
test.py是你要执行的目标Python脚本 - 中间的
2>err是标准错误重定向规则:- shell中运行的所有进程默认自带3个标准文件描述符:
0:标准输入(stdin),默认对应终端的键盘输入1:标准输出(stdout),默认对应程序正常运行的输出内容2:标准错误(stderr),默认对应程序运行时抛出的错误、告警类信息
>是shell的覆盖重定向符号,作用是把前面文件描述符的输出内容,写入到后面指定的文件中,会覆盖文件原有内容- 所以
2>err的实际作用,是把脚本运行过程中产生的所有错误类输出,都写入当前目录下名为err的文件中,不会直接打印到终端界面
- shell中运行的所有进程默认自带3个标准文件描述符:
- 末尾的
&是后台运行标识:- 加上这个符号后,命令会被放到系统后台执行,不会占用当前终端的交互会话
- 后台运行的进程不会监听当前终端的中断信号,所以你无法通过
Ctrl+C快捷键终止它,只能通过kill命令向进程发送终止信号来结束运行
你观察到的两种运行方式的差异,核心就是后台运行标记
&的作用:直接运行test.py时进程绑定在当前前台终端,会响应Ctrl+C发送的中断信号;后台运行后进程和当前终端的信号绑定解除,自然就收不到终端的快捷键中断信号了。
如果有额外的重定向需求,也可以参考常见写法:
- 把标准输出也重定向到文件:
test.py > output.log 2>err &,其中1>output.log可以简写为>output.log - 把标准输出和标准错误都重定向到同一个文件:
test.py > all_output.log 2>&1 &
内容的提问来源于stack exchange,提问作者user97662
相关产品推荐
相关产品推荐

