在 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 命令将后台进程切换到前台。