启动后台进程时如何隐藏shell进程信息?

Lan*_*nes 22 bash ubuntu

[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 
Run Code Online (Sandbox Code Playgroud)

我如何 /dev/null 这两条消息?:

[1] 5232
[1]+  Done                    sleep 3
Run Code Online (Sandbox Code Playgroud)

ps:所以我需要进程的输出,而不是上面提到的两行!

ДМИ*_*КОВ 30

这不是程序输出,而是一些有用的 shell 信息。

无论如何,这些可以通过使用子shell和输出重定向来隐藏

( sleep 3 & ) > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这使 $! (3认同)
  • “2>/dev/null”是好事,我需要进程的输出 (2认同)

Gil*_*il' 5

在 bash 或 zsh 中,您可以调用disown %1来告诉 shell 忘记这项工作。然后 shell 不会打印有关该作业的任何消息,也不会在您运行jobs或向其发送 SIGHUP 时显示它。在 zsh 中,用&!而不是开始工作&相当于disown立即调用它。


小智 5

尝试:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677
Run Code Online (Sandbox Code Playgroud)

并且您隐藏了输出PID。请注意,您仍然可以从 $REPLY检索PID

  • 这太棒了。 (2认同)