プロセスが開始された仮想ターミナルを閉じると、出力は/dev/null
に直接送られますか? 、またはそれは何らかの形でメモリを汚染する可能性がありますか?
出力を取得して、その後の任意の時点で読み続けることはできますか?
[編集]:では、プロセスの所有権を剥奪した瞬間は、その出力を制御する私の力の終わりですか?
また、停止したプロセスを否認すると、最初はすべてが正常に見えることに気付きました。それは終了せず、ジョブにも表示されません。ただし、ログアウトした場合(しない ターミナルを閉じて、su
を終了することを意味します たとえば)、プロセスは終了します。それでも、バックグラウンドで実行されている所有されていないプロセスは実行を継続できます。
承認された回答:
プロセスが「否認」されているという事実は、このプロセスを作成したインタラクティブシェルにとってのみ意味があります。これは、シェルのジョブテーブルにプロセスが(もう)含まれておらず、シェルが終了したときにSIGHUPがこのプロセスに送信されないことを意味します。質問とはあまり関係ありません。
削除された仮想端末に送信される出力はどうなりますか:自分でいくつかのテストを行ったところ、/dev/pts/x
デバイスにはアクセスできず、デバイスを指すすべてのファイル記述子が閉じられるまで、デバイスは再度割り当てられません。そのため、削除された端末への書き込みが保存される理由がわかりません。これはPOSIXでも定義されていないと思います。
端末に書き込むプロセスの出力を取得することについては、端末がまだ稼働している場合でも、それは不可能だと思います¹。できることは、端末への直接入力を取得することだけです(つまり、キーストローク、またはptyのマスター部分によるシミュレートされたキーストローク)。プロセスが端末に書き込まれた内容をstdinで読み取る場合、ほとんどのプロセスで自己ioループが発生します。
プロセス終了に関する最後のコメントについては、何が起こっているのかよくわかりませんが、セッション時のプロセスグループのフォアグラウンド/バックグラウンド状態に関連するシグナル(SIGTTOU、SIGTTIN、SIGHUPなど)の奇妙な動作が疑われますリーダーが終了します(例:su
、あなたが言及した場合)
編集:への回答 いいえ、出力に関しては、プロセスの所有権が剥奪されても何も変わりません。プロセスは制御端末に接続されたままです(デーモンのように既に切り離されている場合を除く)。 ps
を使用してそれを見ることができます 。ただし、fg
は使用できません。 / bg
/jobs
このプロセスのためにシェルによって提供されたコマンド。つまり、端末からの入力をフィードするのが難しい場合があります(フォアグラウンドプロセスグループに属している必要があります)。
—