端末でプロセスを開始し、プロセスが実行されたときに標準エラーで出力を送信するとします。無音化しながらプロセスを背景に移したいです。
&
プロセスを停止して使用し、再起動せずにこれを行う方法はありますか> /dev/null 2>&1
?実行できbg
、ターゲットプロセスの出力記述子を変更できるコマンドがあるかどうかを知りたいです。
答え1
遅すぎました。 〜の後プロセス起動後、シェルは制御されなくなります。プロセスファイル記述子を使用することはできません。静かなこれはシェルコマンドによって行われます。
試してみることしかできません殺す処理することSIGHUP
です。プロセスが正しく処理する場合、 と分離する必要があります。制御端子。残念ながら、多くのソフトウェアはそれを正しく処理できず、単に終了します。
答え2
ターミナルで実行されるプロセスには、stdin、stdout、およびstderrがターミナルにバインドされており、通常ターミナル制御を取得しない限り何もできません。しかし、実際にそうすることができるいくつかのトリッキーなツールがあります。見るこの例。そしてそこに言及されている他のプログラムretty
。
答え3
私は、出力を停止するには遅すぎるとandcozのコメントに同意しません。
プロセスがフォアグラウンドで実行されていると仮定し、Ctrl-Z
プロセスを一時停止するために使用します。これを行うと、ジョブ番号とプロセスIDが報告されます。引き続きbg %1
(タスク#1の場合)プロセスをバックグラウンドに移動できます。これにより、プロセスはバックグラウンドに移動しますが、出力は静かになりません。出力を無音に設定するには、gdb
すべての出力を/dev/null
。
これについては先ほどよく説明しました。https://stackoverflow.com/questions/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764。
答え4
別のコマンドラインツールは、detach
pidfileの作成、stdin、stdout、およびstderrファイルの操作とフォアグラウンド実行をサポートしています。 (detach
同様のツールもサイトで議論されています。)