GNU/Linux >> Linux の 問題 >  >> Linux

所有権を剥奪されてターミナルを失ったプロセスの出力はどうなりますか?

プロセスが開始された仮想ターミナルを閉じると、出力は/dev/nullに直接送られますか? 、またはそれは何らかの形でメモリを汚染する可能性がありますか?
出力を取得して、その後の任意の時点で読み続けることはできますか?

[編集]:では、プロセスの所有権を剥奪した瞬間は、その出力を制御する私の力の終わりですか?

また、停止したプロセスを否認すると、最初はすべてが正常に見えることに気付きました。それは終了せず、ジョブにも表示されません。ただし、ログアウトした場合(しない ターミナルを閉じて、suを終了することを意味します たとえば)、プロセスは終了します。それでも、バックグラウンドで実行されている所有されていないプロセスは実行を継続できます。

承認された回答:

プロセスが「否認」されているという事実は、このプロセスを作成したインタラクティブシェルにとってのみ意味があります。これは、シェルのジョブテーブルにプロセスが(もう)含まれておらず、シェルが終了したときにSIGHUPがこのプロセスに送信されないことを意味します。質問とはあまり関係ありません。

削除された仮想端末に送信される出力はどうなりますか:自分でいくつかのテストを行ったところ、/dev/pts/x デバイスにはアクセスできず、デバイスを指すすべてのファイル記述子が閉じられるまで、デバイスは再度割り当てられません。そのため、削除された端末への書き込みが保存される理由がわかりません。これはPOSIXでも定義されていないと思います。

端末に書き込むプロセスの出力を取得することについては、端末がまだ稼働している場合でも、それは不可能だと思います¹。できることは、端末への直接入力を取得することだけです(つまり、キーストローク、またはptyのマスター部分によるシミュレートされたキーストローク)。プロセスが端末に書き込まれた内容をstdinで読み取る場合、ほとんどのプロセスで自己ioループが発生します。

プロセス終了に関する最後のコメントについては、何が起こっているのかよくわかりませんが、セッション時のプロセスグループのフォアグラウンド/バックグラウンド状態に関連するシグナル(SIGTTOU、SIGTTIN、SIGHUPなど)の奇妙な動作が疑われますリーダーが終了します(例:su 、あなたが言及した場合)

編集:への回答 いいえ、出力に関しては、プロセスの所有権が剥奪されても何も変わりません。プロセスは制御端末に接続されたままです(デーモンのように既に切り離されている場合を除く)。 psを使用してそれを見ることができます 。ただし、fgは使用できません。 / bg /jobs このプロセスのためにシェルによって提供されたコマンド。つまり、端末からの入力をフィードするのが難しい場合があります(フォアグラウンドプロセスグループに属している必要があります)。

関連:スクリプト出力から制御文字(コンソールコード/色を含む)を削除しますか?



Linux
  1. 「java」コマンドは、インストールされている JVM を実行しません

  2. スレッドが分岐するとどうなりますか?

  3. ls と l はどう違いますか?

  1. 非プリエンプティブ、プリエンプティブ、セレクティブ プリエンプティブ カーネルの違いは何ですか?

  2. プロセスとその子プロセスの総リソース (メモリ) を制限する方法

  3. kill 、 pkill 、 killall の違いは何ですか?

  1. Linux –それは制御端末を持っているプロセスですか、それとも制御端末を持っているセッションですか?

  2. 現在の制御端末と`/dev / tty`の間にはどのような関係がありますか?

  3. unlink と rm の違いは何ですか?