Linux 使用输入/输出重定向在后台运行进程
我很想知道当一个进程有输入/输出重定向来在后台运行一个进程时,代码中使用“&”操作符是否会有所不同 这些代码行在后台运行流程方面有什么区别。如果有,我如何确定差异将是什么Linux 使用输入/输出重定向在后台运行进程,linux,bash,shell,background-process,Linux,Bash,Shell,Background Process,我很想知道当一个进程有输入/输出重定向来在后台运行一个进程时,代码中使用“&”操作符是否会有所不同 这些代码行在后台运行流程方面有什么区别。如果有,我如何确定差异将是什么 setsid python script.py < /dev/zero &> log.txt & setsid python script.py < /dev/zero & > log.txt & setsid python script.py < /dev/z
setsid python script.py < /dev/zero &> log.txt &
setsid python script.py < /dev/zero & > log.txt &
setsid python script.py < /dev/zero > log.txt &
setsid python script.py & < /dev/zero > log.txt
setsid python script.pylog.txt&
setsid python script.pylog.txt&
setsid python script.pylog.txt&
setsid python script.py&log.txt
这会带来不同&
兼作命令分隔符(就像;
是命令分隔符一样)。你到底在做什么
setsid python script.py & < /dev/zero > log.txt
setsidpythonscript.py&log.txt
正在后台运行setsid python script.py
,并在前台运行“null”命令(位于&
之后)(最后的另一个&
将在后台运行)。“null”命令的stdin重定向到/dev/zero,stdout重定向到log.txt
另外,&>
是Bash中的一个特殊操作符foo&>out
在运行foo
时将stdout和stderr重定向到out。它与foo&>out
不同,后者在后台运行foo
,也会将null命令的输出重定向到out
(这种对“null”命令的支持就是为什么像单独一行的>foo
这样的习惯用法(有时在shell脚本中可以看到)用于截断文件。)控制运算符
这里有两种用法。一种是作为所谓的控制运算符。每个命令都由控制操作员终止,例如&
,代码>或
。它们之间的区别在于
和
在前台运行命令,&
在后台执行该操作
setsid python script.py < /dev/zero & > log.txt &
setsid python script.py & < /dev/zero > log.txt
带有&>
的版本与带有&>
的版本不同&>
在bash中,没有空格的是一个特殊的重定向操作符,它重定向stdout和stderr
setsid python script.py < /dev/zero > log.txt &
setsid python script.pylog.txt&
这个最终版本与前一个版本类似,只是它只将stdout重定向到log.txt
。stderr继续转到终端。因此&
表示不同的内容,具体取决于上下文
在第一种情况下:
setsid python script.py < /dev/zero &> log.txt &
您只有第一个&
,如上所述,这意味着进程在后台,在本例中,它是setsid python script.py
,放在后台。然后,行的其余部分说,将no进程重定向到log.txt并将其作为背景,这真的有点胡说八道
在第三种情况下:
setsid python script.py < /dev/zero > log.txt &
您将setsid python script.py
放在后台,将stdout of nothing重定向到log.txt,并将/dev/zero
放在stdin of nothing中
setsid python script.py < /dev/zero > log.txt &
setsid python script.py < /dev/zero &> log.txt &
setsid python script.py < /dev/zero & > log.txt &
setsid python script.py < /dev/zero > log.txt &
setsid python script.py & < /dev/zero > log.txt