在 shell 中,为什么“2>err&”允许脚本在后台 运行?
In the shell, why does "2>err&" allows a script to be run in the background?
例如我有一个 python 脚本:
#!/usr/local/bin/python3.7
import time
n=0
while True:
print(n)
n = n + 1
time.sleep(1)
如果我像这样在shell中执行$test.py
,我可以随时点击Ctrl+C
取消脚本。
但是如果我像这样执行脚本:$test.py 2>err&
,我可以停止脚本的唯一方法是从另一个终端使用 kill
命令。
我找不到任何对 2>err&
的引用,它到底是什么意思?
2>err&
不是一回事。
2>err
表示将标准错误重定向到名为err
的文件。前台后台命令都可以,和能不能用Ctl-C.
kill进程无关
命令末尾的 &
表示在后台 运行 它。键盘中断只发送到前台进程组,因此后台命令不会被 Ctl-C 杀死(这假设作业控制有效,它几乎总是用于交互式 shell ).您可以使用 fg
命令将后台进程切换到前台。
例如我有一个 python 脚本:
#!/usr/local/bin/python3.7
import time
n=0
while True:
print(n)
n = n + 1
time.sleep(1)
如果我像这样在shell中执行$test.py
,我可以随时点击Ctrl+C
取消脚本。
但是如果我像这样执行脚本:$test.py 2>err&
,我可以停止脚本的唯一方法是从另一个终端使用 kill
命令。
我找不到任何对 2>err&
的引用,它到底是什么意思?
2>err&
不是一回事。
2>err
表示将标准错误重定向到名为err
的文件。前台后台命令都可以,和能不能用Ctl-C.
&
表示在后台 运行 它。键盘中断只发送到前台进程组,因此后台命令不会被 Ctl-C 杀死(这假设作业控制有效,它几乎总是用于交互式 shell ).您可以使用 fg
命令将后台进程切换到前台。