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

从Perl使用nohup时,如何抑制系统输出?,perl,Perl,在Perl中,我使用nohup命令启动一个进程。命令如下: system("nohup myproc pe88 &"); 这工作正常,过程按预期开始。但是,我想抑制此命令的以下输出-即: Sending output to nohup.out 我必须让这个进程将它的所有输出重定向到nohup.out,但我只是不希望在运行Perl程序时显示它。相反,我想打印我自己的用户友好消息。我尝试了一些变体,但没有任何效果。“将输出发送到nohup.out”消息,因此您可以通过常用方法捕获STDE

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

system("nohup myproc pe88 &");
这工作正常,过程按预期开始。但是,我想抑制此命令的以下输出-即:

Sending output to nohup.out
我必须让这个进程将它的所有输出重定向到nohup.out,但我只是不希望在运行Perl程序时显示它。相反,我想打印我自己的用户友好消息。我尝试了一些变体,但没有任何效果。

“将输出发送到nohup.out”
消息,因此您可以通过常用方法捕获STDERR

  • 通过shell:
    系统(“nohup myproc pe88 2>/tmp/error_log.txt&”)

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

  • 或者通过Perl捕获(不要使用
    system()
    调用,而是使用
    IPC::Open3
    或)

    • 那么:

      system("nohup myproc pe88 >nohup.out 2>&1 &");
      
      nohup的手册页上说:

      如果标准输出是一个终端, 如果需要,将输出附加到“nohup.out” 可能,否则,$HOME/nohup.out。 如果标准误差是一个终端, 将其重定向到标准输出。到 将输出保存到文件,使用'nohup' 命令>文件'

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


      注意,如果只重定向STDOUT,nohup将打印一条“将stderr重定向到STDOUT”消息。

      注意,仅捕获stderr,nohup甚至不会打印“将输出发送到nohup.out”消息。