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

setsid() が役立つのはいつですか? Linux でプロセスをグループ化する必要があるのはなぜですか?

セッションは、制御端末を共有する一連のプロセスです。 setsid は、新しい端末への接続を開始したために新しいセッションを開始したい場合 (端末エミュレーター内でシェルを開始する場合など) に便利です。制御端末に関連付ける必要があります)。

これらの側面について私が知っている最良の説明は、R.W. Stevens Advanced Programming in Unix environment にあります。 .


Why do we need to group processes? きれいにシャットダウンしたい状況を考えてみましょう。これには、子供に信号を送ることも含まれます。固有の競合状態があります。SIGCHLD が受信されていないため、子がまだ生きていることがわかります。だからあなたは信号を送ります。しかし、子はシグナルが送信される前に終了し、別の (関係のない) プロセスが開始され、シグナルが送信された子と同じ pid を取得します。その後、信号は新しい無関係なプロセスに送られます。これは悪いです。したがって、特定の pid にシグナルを送信するのではなく、プロセス グループにシグナルを送信します。子プロセスが終了し、元の pid で新しいプロセスが開始された場合、新しいプロセスは そうではありません プロセス グループの一部であり、上記の問題は回避されます。


Linux
  1. システム管理者向けの30のLinuxプロセス演習

  2. Sigintが親プロセスに送信されたときに子プロセスに伝播されないのはなぜですか?

  3. Linux – Ctrl + cはSigintシグナルを複数のプロセスに送信できますか?

  1. Linux – -9プロセスを強制終了すべきではないのはいつですか?

  2. UNIX / Linux:プロセスにシグナルを送信する 3 つの方法

  3. Linux シグナルの基礎 – パート I

  1. 制御が必要なためにLinuxに切り替えた理由

  2. Linux – Initプロセス:すべてのプロセスの祖先?

  3. UNIX / Linux プロセス:C fork() 関数