プロセスをバックグラウンドに移動し、その出力を停止するにはどうすればよいですか?


11

ターミナルでプロセスを開始し、実行中に標準エラーに出力を送信するとします。プロセスをバックグラウンドに移動し、同時に沈黙させたい。

プロセスを停止し、それが使用して再起動せずにこれを行う方法がある&とは> /dev/null 2>&1bg ターゲットプロセスの出力記述子を実行して変更できるコマンドがあるかどうかと思います。

回答:


9

遅すぎる。後工程が開始されると、シェルはにはより多くの制御がないプロセスのあなたがすることはできませんので、ファイルディスクリプタ沈黙シェルコマンドでそれを。

あなたはプロセスを殺すことSIGHUPを試みることができるだけです。プロセスがそれを正しく処理すれば、ttyの制御から切り離されるはずです。不運にも、多くのソフトウェアはそれを正しく処理せず、単に死んでしまいます。


CTRL + Zを押してプロセスをバックグラウンドで実行できませんか?それはプロセスを沈黙させません、そしてあなたがログアウトした場合、私はそれもプロセスを殺すと思います。
ロイ・リコ

1
@RoyRicoは、殺害SIGSTOPのプロセスに(またはあなたが言うように、Ctrl + Zをやって)プロセスを沈黙しません。プロセスを停止します!
andcoz

5

端末から実行されるプロセスには、その端末にstdin、stdout、およびstderrがバインドされており、その端末の制御を取り戻すことなく、それについて何も実行できません...通常は。しかし、実際にそれを可能にするいくつかのトリッキーなツールがあります。この例を見てください。そしてrettyそこで言及されているような他のプログラム。


3

出力を沈黙させるには遅すぎるとandcozに同意しません。

プロセスがフォアグラウンドで実行されていると仮定して、プロセスCtrl-Zを一時停止するために使用します。これにより、ジョブ番号とプロセスIDが報告されます。bg %1(ジョブ#1の場合)を使用して、プロセスをバックグラウンドに移動できます。これによりプロセスがバックグラウンドに移動しますが、出力は無音になりません。出力を消音にするには、gdbすべての出力をにリダイレクトするために使用できます/dev/null

これは以前/programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764で非常にうまく説明されています


0

さらに別のコマンドラインツールはdetachです。最新バージョンは、pidfileの書き込み、stdin、stdout、stderrのファイルの使用、およびフォアグラウンドでの実行をサポートしています。(のWebサイトでdetachも同様のツールについて説明しています。)

http://inglorion.net/software/detach/

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