拒否されて端末を失ったプロセスの出力はどうなりますか?

拒否されて端末を失ったプロセスの出力はどうなりますか?

一部のプロセスを開始した仮想端末を閉じると、出力は直接入りますか、/dev/nullそれともメモリを汚染しますか? とにかく、後でいつでも読み続けることができるように出力を取得できますか?

[編集者]:それでは、プロセスを拒否した瞬間、実際にプロセスの出力を制御する権限が終了するのでしょうか?

また、停止したプロセスを拒否すると、最初はすべてが正常に見えます。プロセスが終了したり、ジョブに表示されません。しかし、私が出ると(そして私はいいえsuこれは、終了などの端末を閉じることを意味し、プロセスが終了します。それにもかかわらず、バックグラウンドで実行されている拒否プロセスは引き続き実行できます。

ベストアンサー1

プロセスが「拒否」されたという事実は、そのプロセスを作成した対話型シェルにのみ意味があります。これは、シェルのタスクリストにプロセスがなくなり、シェルが終了したときにSIGHUPがプロセスに転送されないことを意味します。これはあなたの質問にはあまり関係がありません。

削除された仮想端末に送信された出力に何が起こるかについて:私は直接いくつかのテストを実行した結果、デバイスにアクセスできず、そのデバイスを指すすべてのファイル/dev/pts/x記述子が閉じられるまでデバイスが再割り当てされないことを示します。確認しました。したがって、削除された端末への書き込みがなぜ保存されるのかわかりません。私はこれがPOSIXによって定義されていないようです。

端末に書き込む特定のプロセスの出力をキャッチすることに関して、端末がまだ存在していても可能ではないと思います。あなたができることは、端末から直接入力を受け取るだけです(たとえば、キー入力またはptyの主要部分でシミュレートされたキー入力など)。プロセスがstdinの端末に書き込まれた内容を読み取ると、ほとんどのプロセスでself-ioループが発生します。

プロセス終了の最後の言葉は何が起こっているのかわかりませんが、セッションリーダーが終了すると、プロセスグループのフォアグラウンド/バックグラウンド状態に関連する信号(SIGTTOU、SIGTTIN、SIGHUPなど)のかなり奇妙な動作が疑われます。 (例えばsu言及された場合)。

回答編集する:いいえ、出力に関する限り、プロセスが拒否されても変更はありません。プロセスはまだ制御端末に接続されています(デーモンのようにそれ自体が分離されていない限り)。を使用していることがわかります。ただし、このプロセス中にシェルが提供する // コマンドはps使用できなくなります。これは、端末から入力を供給するのが難しいことを意味します(フォアグラウンドプロセスグループに存在する必要があります)。fgbgjobs

-
1.プロセスが望まない限り、いくつかのデバッグツールを使用してプロセスをハイジャックします(上記の注意事項を参照)。

おすすめ記事