Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用输入/输出重定向在后台运行进程_Linux_Bash_Shell_Background Process - Fatal编程技术网

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