【问题标题】:In the shell, why does "2>err&" allows a script to be run in the background? [duplicate]在shell中,为什么“2>err&”允许脚本在后台运行? [复制]
【发布时间】:2021-08-24 20:52:19
【问题描述】:

例如我有一个 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& 的引用,它的真正含义是什么?

【问题讨论】:

  • 不是重定向,是&在后台执行命令。正好在stderr重定向后写到这里没有空格。即,如果您运行test.py &,它也会在后台运行。 2> 将第 2 号文件描述符(即 stderr)重定向到后面命名的目的地,此处为 err
  • 写成2>err & 会更好——这样可以减少混乱。

标签: bash shell unix redirect io-redirection


【解决方案1】:

2>err& 不是一回事。

2>err 表示将标准错误重定向到名为err 的文件。前台和后台命令都可以这样做,和是否可以用Ctl-C杀死进程无关。

& 在命令末尾表示在后台运行它。键盘中断只发送到前台进程组,因此后台的命令不会被 Ctl-C 杀死(这假设作业控制有效,它几乎总是用于交互式 shell)。您可以使用fg 命令将后台进程切换到前台。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多