バックグラウンドプロセスを開始するときにシェルプロセス情報を非表示にする方法


19
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

これら2つのメッセージを/ dev / nullするにはどうすればよいですか?:

[1] 5232
[1]+  Done                    sleep 3

ps:そのため、プロセスの出力が必要ですが、上記の2行は必要ありません!


これらの行は、対話形式で実行したときにのみ取得されます。たとえば、スクリプトから実行する場合はそうしません。
デロバート

回答:


24

これはプログラムの出力ではなく、いくつかの有用なシェル情報です。

とにかく、それらはサブシェルと出力リダイレクトを使用して隠すことができます

( sleep 3 & ) > /dev/null 2>&1

2
「2> / dev / null」は良いことです。プロセスからの出力が必要です
LanceBaynes

@LanceBaynesプロセスは、stderrに何かを書き込むこともできます。
クリスダウン

2
これが$でpidの取得を無効にするのは残念です!
Deleplace

3

bashまたはzshではdisown %1、ジョブを忘れるようにシェルに伝えるために呼び出すことができます。その場合、シェルはそのジョブに関するメッセージを出力せず、実行したときjobsやSIGHUPを送信したときにも表示されません。zshでは、&!代わりにでジョブを開始&することdisownは、すぐに呼び出すことと同等です。



1

試してください:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677

そして、出力PIDの両方を非表示にしました。$ REPLYからPIDを取得できることに注意してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.