当我在shell中启动一些后台进程时,例如:
geth --maxpeers 0 --rpc &
它返回类似:
[1] 1859
......没有任何这个过程的流出。我不明白它是什么?我如何获得stdout
的{{1}}?文档中的信息默认情况下在shell中显示geth
后台进程。
我的shell在远程Ubuntu系统中运行。
答案 0 :(得分:2)
“&”指示shell在后台运行命令。它使用fork系统调用来创建子shell并异步运行作业。
stdout和stderr仍然应该打印到屏幕上。
如果您不想在屏幕上看到任何输出,请将stdout和stderr重定向到文件:
geth --maxpeers 0 --rpc > logfile 2>&1 &
答案 1 :(得分:2)
关于问题的第一部分:
......没有任何这个过程的流出。我不明白是什么 它?
这是命令执行环境(shell本身的一部分)的一部分,并不是您的脚本的结果。 (这是shell如何处理脚本的后台处理,并跟踪允许暂停和恢复作业的过程。)
如果您查看man bash
下的JOB CONTROL
,它会详细说明您所看到的内容,例如
shell将作业与每个管道相关联。它保持一张桌子 当前正在执行的作业,可能与
jobs
一起列出 命令。当bash以异步方式(在后台)启动作业时, 它打印出一行如下:[1] 25647
答案 2 :(得分:1)
我不明白它是什么?
[1] 1859
来自Bash的作业功能的输出,可以管理后台进程(作业),它包含有关刚刚启动的作业的信息,打印到stderr:< / p>
1
是作业ID (以%
为前缀)可与内置文件一起使用,例如kill
和{{1} })
wait
是后台流程的 PID (进程ID)。
在25647
的{{1}}部分了解详情。
如何获得
JOB CONTROL
的标准输出?文档中有信息,默认情况下,后台进程的标准输出显示在shell中。
实际上,默认情况下后台作业会将其输出打印到当前shell的stdout和stderr流,但请注意它们异步 - 即后台作业的输出将在生成(可能是缓冲的)时出现,与直接发送到当前shell的输出交错,这可能是破坏性的。
您可以像往常一样将重定向应用于后台命令,以便在文件中捕获其输出,如user3589054's helpful answer中所示,但请注意,这样做不会使作业控制消息(上例中的man bash
)。
如果您想在创建时静音作业控制消息,请使用:
geth
要使工作的整个生命周期保持沉默,请参阅我的this answer。