在Perl中,我使用nohup命令启动进程。命令如下:
system("nohup myproc pe88 &");
这很好,并且过程按预期开始。但是我想抑制此命令的以下输出 - 即:
Sending output to nohup.out
我必须让这个过程将它的所有输出重定向到nohup.out但我只是不想在运行我的Perl程序时显示它。我想改为打印我自己的用户友好消息。我尝试过一些变种,但对我来说没有任何效果。
答案 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::Open3
或capture
command from IPC::System::Simple)