从Perl使用nohup时如何抑制系统输出?

时间:2010-10-03 00:19:19

标签: perl

在Perl中,我使用nohup命令启动进程。命令如下:

system("nohup myproc pe88 &");

这很好,并且过程按预期开始。但是我想抑制此命令的以下输出 - 即:

Sending output to nohup.out

我必须让这个过程将它的所有输出重定向到nohup.out但我只是不想在运行我的Perl程序时显示它。我想改为打印我自己的用户友好消息。我尝试过一些变种,但对我来说没有任何效果。

2 个答案:

答案 0 :(得分:5)

怎么样:

system("nohup myproc pe88 >nohup.out 2>&1 &");

nohup的手册页说:

  

如果标准输出是终端,   如果将输出附加到'nohup.out'   可能,'$ HOME / nohup.out'否则。   如果标准错误是终端,   将其重定向到标准输出。至   将输出保存到FILE,使用`nohup   命令> FILE”。

因此,如果您明确地将STDOUT和STDERR重定向到nohup.out,那么nohup不会打印该消息。当然,如果nohup.out不可写,则不会自动回退到$ HOME / nohup.out,但如果这是一个问题,您可以先检查它。

请注意,如果仅重定向STDOUT,nohup会打印“将stderr重定向到stdout”消息。

答案 1 :(得分:4)

"Sending output to nohup.out"消息is sent to STDERR,因此您可以通过常用方法捕获STDERR

  • 通过shell:system("nohup myproc pe88 2> /tmp/error_log.txt &");

    如果您根本不需要stderr,请使用/dev/null代替/tmp/error_log.txt;并添加“> /tmp/myout.txt”以重定向标准输出。

  • 或通过Perl捕获(不要使用system()来电,而是使用IPC::Open3capture command from IPC::System::Simple