プロセスが「無視されている」という事実は、このプロセスを作成した対話型シェルにとってのみ意味があります。これは、シェルのジョブテーブルにプロセスが(もう)含まれておらず、シェルの終了時にSIGHUPがこのプロセスに送信されないことを意味します。それはあなたの質問とは本当に関係ありません。
削除された仮想端末に送信される出力に何が起こるかについて:自分でいくつかのテストを行いましたが、/dev/pts/x
デバイスにアクセスできず、それらを指すすべてのファイル記述子が閉じられるまで再割り当てされないことに気付きました。そのため、削除された端末への書き込みが保存される理由がわかりません。これはPOSIXでも定義されていないと思います。
ターミナルに書き込むプロセスの出力を取得することについては、ターミナルがまだ生きているときでも可能だとは思いません¹。できることは、ターミナルへの直接入力(つまり、キーストローク、またはptyのマスター部分によるシミュレートされたキーストローク)を取得することだけです。プロセスが端末に書き込まれたものをstdinで読み取る場合、ほとんどのプロセスでself ioループが発生します。
プロセスの終了に関する最後の発言については、何が起こっているのか本当にわかりませんが、セッションが開始されると、プロセスグループのフォアグラウンド/バックグラウンド状態に関連するシグナル(SIGTTOU、SIGTTIN、SIGHUP、またはその他)のかなり奇妙な動作が疑われますリーダーが終了します(たとえばsu
、あなたが言及した場合)。
編集への回答:いいえ、出力に関しては、プロセスが否認されても何も変わりません。プロセスは制御端末に接続されたままです(デーモンのように既に切り離されていない限り)。あなたはそれを使用してそれを見ることができますps
。ただし、このプロセスではシェルが提供するfg
/ bg
/ jobs
コマンドを使用できなくなります。つまり、ターミナルからの入力をフィードするのが難しい場合があります(フォアグラウンドプロセスグループに所属する必要があります)
—
1.プロセスが喜んで、またはいくつかのデバッグツールでハイジャックされない限り(上記のコメントを参照)。