在Perl中,我使用nohup命令启动进程.命令如下:
system("nohup myproc pe88 &");
Run Code Online (Sandbox Code Playgroud)
这工作正常,过程按预期开始.但是,我想抑制此命令的以下输出 - 这是:
Sending output to nohup.out
Run Code Online (Sandbox Code Playgroud)
我必须让这个过程将它的所有输出重定向到nohup.out,但我只是不想在运行我的Perl程序时显示它.我想改为打印我自己的用户友好消息.我尝试过一些变种,但对我来说没有任何效果.
"Sending output to nohup.out"消息发送到 STDERR,因此您可以通过常用方法捕获 STDERR
要么通过外壳: system("nohup myproc pe88 2> /tmp/error_log.txt &");
如果您根本不需要 stderr 则使用/dev/null代替/tmp/error_log.txt;并添加“ > /tmp/myout.txt”以重定向标准输出。
或者通过 Perl 捕获(不要使用system()调用,而是使用IPC::System::Simple 中的IPC::Open3或capture命令)
怎么样:
system("nohup myproc pe88 >nohup.out 2>&1 &");
Run Code Online (Sandbox Code Playgroud)
nohup的手册页说:
如果标准输出是终端,则在可能的情况下将输出附加到'nohup.out',否则为'$ HOME/nohup.out'.如果标准错误是终端,则将其重定向到标准输出.要将输出保存到FILE,请使用`nohup COMMAND> FILE'.
因此,如果您明确地将STDOUT和STDERR重定向到nohup.out,那么nohup不会打印该消息.当然,如果nohup.out不可写,则不会自动回退到$ HOME/nohup.out,但如果这是一个问题,您可以先检查它.
请注意,如果仅重定向STDOUT,nohup会打印"将stderr重定向到stdout"消息.
| 归档时间: |
|
| 查看次数: |
12236 次 |
| 最近记录: |