背景、ゾンビ、デーモン、ctty - これらの概念は関連していますか?

背景、ゾンビ、デーモン、ctty - これらの概念は関連していますか?

backgroundこれらのプロセス概念は、zombiedaemonどのように関連していますかwithout controlling terminal

私は彼らがいくつかの点で、特に合格の概念に近いと思いますcontrolling terminalが、まだ理解していない限り、Linuxに関する記事を読んでいる子供に何かを説明する必要があるように、話す情報はあまりありません。あまりにも多くの嘘のように。

アップデート#1:例えば(本当かどうかはわかりません)

  • background-- - 親プロセスがないバックグラウンドプロセスなので、フォアグラウンドzombieプロセスにはできません。zombiezombie
  • daemon---without cttyすべてのプロセスdaemonsはなしで実行されますが、cttyすべてのプロセスがcttyなければ実行されません。daemons
  • background-- daemon-aをbackground process検索して対話式に再実行できます。daemon is not
  • zombie-- without ctty- 取り付けるかどうかはzombie重要ではありません。ctty
  • background--- 時々バックグラウンドで送信されデーモンになったり、デーモンから持って来れば死ぬwithout ctty場合processescttyctty

答え1

つまり、リンクを追加します。

ゾンビ

終了/終了しても親がまだ終了を確認していないプロセス(システムwait()コールを使用)デッドプロセスはプロセステーブルに保存され、親プロセスに子プロセスの子プロセスの終了と終了のステータスを通知できます。通常、子プロセスを分岐するプログラムはシャットダウン時にシャットダウン状態も読み取るため、親プロセスが停止しているか問題がある場合にのみゾンビを表示できます。

望むより:

制御端末、セッション、フォアグラウンド、バックグラウンド

これは、端末で実行されるシェルコンテキストのジョブ制御に関連しています。ユーザーはログインし、セッションを開始し、端末(制御端末)にバインドし、シェルを開始します。その後、シェルはプロセスを実行し、ユーザーの希望に応じてそれを前景と背景に送信します(を使用してプロセスを開始し、を使用してプロセスを停止します&)。端末から読み書きする場合、端末に割り込み信号があるとバックグラウンド処理が停止します。フォアグラウンドプロセスは割り込み信号を受け取ります。 (カーネルのターミナルドライバはこれらの信号を処理し、シェルはどのプロセス(グループ)がフォアグラウンドまたはバックグラウンドに送信されるかを制御します。^Zfgbg^C

望むより:

悪魔

デーモンとして実行されるプロセスは通常、特定の端末(またはログインセッションまたはシェル)にバインドしてはいけません。端末が閉じている場合は、信号を受信しないように制御端末があってはなりません。通常、端末はI / Oを実行しないと予想されます。コマンドラインからデーモンを起動するには、端末とのすべての接続を切断する必要があります。つまり、制御端末を削除するには、新しいセッション(上記のタスク制御の意味で)を開始し、端末のファイルハンドルを閉じる必要があります。もちろん、initsystemdなどのログインセッションの外部で開始された操作には、最初からこれらの接続はありません。

デーモンには制御端末がないため、ジョブ制御の対象ではなく、ジョブ制御の意味で「フォアグラウンド」または「バックグラウンド」にあるものも適用されません。また、デーモンはinit終了時にクリーンアップされるように親が再指定されることが多いため、通常はデーモンをゾンビとして扱いません。

望むより:

答え2

ゾンビ他のプロセスと実際の関係はありません。シャットダウンされたがシャットダウン状態waitpid()または同様のプロセスがまだ親プロセスから読み取られていないプロセスにすぎません。プロセスにエラーがあるか停止しない限り、これらの内容は表示されないでください。

悪魔端末を制御せずに実行できるプログラムです。通常、プログラムを実行するとfork()s独自のプロセスと親プロセスの両方が終了するため、シェルはコマンドが完了したと考え、子プロセスは端末から切り離され、ログインセッションを終了します。親プロセスが終了すると、その親プロセスIDは1になります(伝統的にはprograminitまたは現在は)systemd。このプロセスはサブアイテムが死んだ後に収集されるため、ゾンビに圧倒されません。

プロセスはプロセスに関連付けることができます。制御端子、通常は入力を受け取り、出力を送信する場所です。端末は接続されたプロセスにシグナルを送信し、プロセスグループを次のように識別することもできます。フォアグラウンドグループ。プロセスは次の場所にあります。フォアグラウンドグループCtrl-C と Ctrl-Z を押すと、端末から入力を読み出し、SIGINT および SIGSUSP 信号を送信できます。含まれていないすべてのプロセスフォアグラウンドグループSIGTSTPによって端末からデータを読み取ろうとする試みが中断されました。

シェルは、実行を要求した各パイプコマンドごとに異なるプロセスグループを作成し、どのプロセスグループを切り替えるかを切り替えます。フォアグラウンドグループフォアグラウンドとバックグラウンドの間でタスクを移動します。コマンドを実行すると、通常、シェルは新しいプロセスグループを作成し、グループを作成します。フォアグラウンドグループ。サフィックスを追加すると、&シェルは単にそのまま残ります。フォアグラウンドグループそれがどこにあるか、新しいグループが背景にあります。 Ctrl-Z を押すと、SIGSUSP が前景グループに送信され、ほとんどのコマンドはフリーズしますが、シェルはフリーズしませんが、アクティブなコマンドは変更されます。フォアグラウンドグループ新しいコマンドを要求できるように自分自身を返します。

このbgコマンドは、SIGSUSPに一時停止した後にバックグラウンドで実行を再開できるように、SIGCONTをプロセスグループに送信します。 fg変更フォアグラウンドグループすでにバックグラウンドで実行されている既存のグループの1つに移動し、それをフォアグラウンドにインポートします。

答え3

さて、私の説明はこんな感じです。ポイントは違いこのタイプのプロセス間(簡単ですが有益です):

  • zombie- 先ほど終了したが(実行は完了)、プロセステーブルにまだエントリがあるプロセス。ノート:ゾンビプロセスにはまだ通常、存在する理由は、親プロセスに子プロセスの実行結果(終了コードなど)を知らせることです。
  • disowned processdisown(端末を制御しない) - ユーザーが明示的に編集したり、親プロセスツリーから分離したりするように設計されたプロセス。親プロセスが実行を完了しても実行が継続されます。たとえば、ユーザーがsshリモートコンピュータにログインしてWebサーバーなどを起動し、そのコンピュータでdisown実行してsshセッションを終了します。プロセスは、もは​​や親プロセスツリーの一部ではないため、実行を続けます。プロセスの実行を拒否することもできますnohup
  • background process- バックグラウンドで実行されます。 - 出力をユーザーのttyに分割しません。最終的に実行するか、意図的&にバックグラウンドでフォークされます。プロセスをバックグラウンドで送信する別のオプションは、プロセスを実行してキーを押すことですctrl+z。ただし、親プロセスが終了すると、バックグラウンドで実行されている子プロセスも終了します(ノート作成者:@psusi - 以前の事実は、ユーザーが端末で開始したプロセスにのみ適用されます。それ以外の場合、子プロセスは「孤立」になり、initプロセス(pid 1)を親プロセスにインポートします。
    • daemon- バックグラウンドプロセスと非常によく似ています。また、バックグラウンドで実行されますが(設計上)暗黙的に分岐する可能性が高いです。通常、実際の作業(着信接続など)を実行する前に何かが起こるのを待って、バックグラウンドで静かに座っています。実際、悪魔両方可能認識されない(可能性が高い)と背景プロセスはデザインによって異なります。

この説明がこのタイプのプロセスを区別するのに役立つことを願っています。

関連情報