不名誉プログラムのSTDOUTはどこに向けられていますか?


11

この質問のフォローアップとして、私が実行したプログラムのSTDOUTおよびSTDERRがどこにdisown -hリダイレクトされるのか知りたいのですが。

回答:


10

disownプログラムSTDOUT / ERRは変更されません。リダイレクトした場所(>などを使用)に移動します。それらをリダイレクトしなかった場合、プログラムを開始したターミナルに移動し続けます(そのターミナルを閉じるまで、その場合は破棄されます)。

説明のために、これをターミナルで実行します:

bash -c 'while true; do sleep 1; echo hi; done' &

これは毎秒「こんにちは」を出力します(そしてあなたをひどく困らせます;-))。あなたがいる場合disownのプログラム開始後、「こんにちは」のはただ継続します。シェルのPIDを見つけ(たとえば、psを使用)、それを停止して停止する必要があります。

編集:

コメントに基づいて、おそらくあなたが本当にやりたいことは、プログラムをdisown編集して、それが実行されていた端末を閉じた後にプログラムの出力を回復することです。これは、この質問で説明されています:tcshによる事後のリモートnohup(クァックキホーテのおかげで)。


彼の以前の質問によると、事実は彼がこの以前のターミナルを閉じたことです。では、どうすれば出力を取得できますか?
Gnoupi

@Gnoupi:出力を元に戻す方法はないと思います。少なくとも私はなんの方法も聞いたことがありません。
sleske

コメントありがとうGnoupi :-)実際、出力はどこにも見つかりません。私は見続けるつもりです:-)
スローン

1
これが本当に答えです。disownは何も変更しません。プロセスを開始するときに、キャプチャまたはリダイレクトをセットアップする必要があります。あなたが後でそれを必要とする場合、GDBは:あなたの(唯一の)友人であるsuperuser.com/questions/50058/...
キホーテいんちき

@quack-質問では、ツールだけでなく、実際のユースケースを強調するためにリファクタリングが必要だと思います。現在の形式(disownを中心とする)では、これは確かに正しい答えです。しかし、コンテキストから、前の質問で、ユーザーは出力を回復したいだけであり、この場合、あなたのリンクが答えです。
グヌーピ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.