我使用的是 Red Hat Linux Enterprise 版本 5。我注意到人们有时会运行带有几个&
选项的命令。例如,在下面的命令中,有两个&
标志。他们的目的是什么?它们总是与 nohup 一起使用吗?
nohup foo.sh <script parameters> >& <log_file_name> &
Run Code Online (Sandbox Code Playgroud)
Mar*_*ini 32
在 Bash shell 脚本中,与号“&”用于派生进程:
find -name hello &
Run Code Online (Sandbox Code Playgroud)
它会导致 find 命令被派生并在后台运行(你总是可以通过它的 PID 杀死它)。
kma*_*rsh 26
为什么使用“&”运行 Linux shell 命令?
立即返回提示,并在后台运行该过程。
它们的作用是什么?
即使在用户注销(或退出启动 shell)后,nohup 也允许后台进程继续运行。
>& 将标准输出和标准错误都重定向到日志文件中。
&在后台运行整个事情,立即给你提示。
解释:
每个 Linux 进程打开三个 I/O 通道,一个输入“stdin”,一个标准输出“stdout”和一个标准错误输出“stderr”。它们可用于二进制,但它们传统上是文本。当大多数程序看到 stdin 关闭时,它们会退出(这可以由程序员更改)。
当父 shell 退出时,子进程的 stdin 关闭,并且(通常,通常)子进程也退出。此外,孩子们会收到一个软件信号 SIGHUP,表明用户已经“挂断”(以前是调制解调器),这里的默认设置也是退出。(注意,程序员可以在编写程序时更改所有这些)。
所以,nohup 所做的是给子进程一个单独的 I/O 环境,将来龙去脉与未绑定到父 shell 的东西捆绑在一起,并使子进程免受 SIGHUP 信号的影响。一旦用户断开连接,您将看到 init(进程 1)拥有的 nohup 后台进程,而不是用户的 shell。
但是,nohup
如果进程在前台运行,则无法完全完成这项工作,因此&
用于在后台运行程序,无论是否有用户登录,它都可以愉快地保持运行。
Den*_*son 15
除了 Martin、Ash 和 Kevin 的答案之外,有时您还会看到在数学上用于按位 AND *的&符号:
$ echo $(( 11 & 7 ))
3
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉位运算符:
11: 1011
7: 0111
-------- AND
3: 0011
Run Code Online (Sandbox Code Playgroud)
在每个位置,第一个数字和第二个数字中都有一个位,在答案中将该位设置为 1。
* Kevin 的答案中的功能称为逻辑与。
详细说明 Ash 的答案,当用于重定向时,&符号可以告诉 shell 复制文件描述符。在这个命令中echo "hello" > outputfile 2>&1
,&符号导致任何可能进入标准错误(stderr,文件描述符2)的输出与标准输出(stdout,文件描述符1,左侧的默认值>
)相同。该>& outputfile
运营商的简写> outputfile 2>&1
。
此外,在击4新,也有在对条款两个新的终止case
命令;&
和;;&
影响的情况下是否“下落通过”,如果是这样,是否进行下一个测试。
Ash*_*Ash 13
除了@Martin 的回答:与号的另一种用法(>&
如上)是同时捕获 stdout
和stderr
。通常,如果您将输出重定向到一个只有 '>' 的文件,您只会得到输出到stdout
,而忽略任何错误。
归档时间: |
|
查看次数: |
95976 次 |
最近记录: |