在 Perl 中使用 nohup 时如何抑制系统输出?
Posted
技术标签:
【中文标题】在 Perl 中使用 nohup 时如何抑制系统输出?【英文标题】:How can I suppress system output when using nohup from Perl? 【发布时间】:2010-10-03 00:19:18 【问题描述】:在 Perl 中,我使用 nohup 命令启动一个进程。命令如下:
system("nohup myproc pe88 &");
这工作正常,进程按预期开始。但是,我想禁止此命令的以下输出 - 即:
Sending output to nohup.out
我必须让这个进程将它的所有输出重定向到 nohup.out,但我只是不想在我运行我的 Perl 程序时显示它。相反,我想打印我自己的用户友好消息。我已经尝试了一些变体,但没有一个对我有用。
【问题讨论】:
【参考方案1】:"Sending output to nohup.out"
消息is sent to STDERR,因此您可以通过常规方法捕获 STDERR
通过外壳:system("nohup myproc pe88 2> /tmp/error_log.txt &");
如果您根本不需要 stderr,请使用 /dev/null
而不是 /tmp/error_log.txt
;并添加“> /tmp/myout.txt
”来重定向标准输出。
或者通过 Perl 捕获(不要使用 system()
调用,而是使用 IPC::Open3
或 capture
command from IPC::System::Simple)
【讨论】:
请注意,仅捕获 STDERR,nohup 甚至不会打印“将输出发送到 nohup.out”消息。【参考方案2】:怎么样:
system("nohup myproc pe88 >nohup.out 2>&1 &");
nohup 的手册页说:
如果标准输出是终端, 如果将输出附加到“nohup.out” 可能,否则为 '$HOME/nohup.out'。 如果标准错误是终端, 将其重定向到标准输出。到 将输出保存到 FILE,使用 `nohup 命令 > 文件'。
因此,如果您将 STDOUT 和 STDERR 显式重定向到 nohup.out,则 nohup 不会打印该消息。当然,如果 nohup.out 不可写,您不会自动回退到 $HOME/nohup.out,但如果这是一个问题,您可以先检查一下。
请注意,如果您只重定向 STDOUT,nohup 会打印“将 stderr 重定向到 stdout”消息。
【讨论】:
以上是关于在 Perl 中使用 nohup 时如何抑制系统输出?的主要内容,如果未能解决你的问题,请参考以下文章