答え1
ユーザーまたは一般的なプログラマーの観点からは、プロセスをあるグループから別のグループに移動することはできません。プロセスグループを構成することはシェルの使命です。ジョブを対話的に実行すると、シェルはそのジョブを独自のグループに入れます。これの主な目的は、Ctrlユーザーが+を押したときにグループ全体(パイプ内のすべてのプロセス)を終了することですC。
より一般的には、プロセスグループが実行できることの1つは、プロセスグループをアトミックに終了することです。一部のプロセスを一覧表示して終了しようとすると、プロセスの1つが途中で分岐する可能性があります。プロセスグループを終了すると、フォーク中であってもグループ内のすべてのプロセスも終了します。
ユーザーまたはアプリケーションプログラマーとして時々やりたいことの1つは、独自のグループで新しいプロセスを実行することです。この操作を実行するユーザーレベルのコマンドはありません。対話型シェルを起動すると、これを行うことができます。 (望むよりシェルスクリプトのタイムアウト複雑な例を見てみましょう。 ) および次のようなその他のコマンドtimeout
便利GNU coreutilsとLinuxでsetsid
便利タスクの一部として新しいプロセスグループを作成するutil-linuxファミリで。
プロセスを別のプロセスグループに移動するシステムコールは次のとおりです。setpgid
。 (という部分エイリアスもありますsetpgrp
。) いくつかの制限があります。プロセス自体またはその親でのみ呼び出すことができ、ターゲットグループは元のグループと同じセッションになければなりません。あるグループから別のグループにプロセスを自由に移動することはできません。
グループのプロセスを列挙する具体的な方法はありません。あなたができることは、すべてのプロセスを列挙し、その特定のグループのプロセスを選択することだけです。ps
この列を含む出力にプロセスグループを一覧表示できますpgid
(例:)。ps -e -o pid,ppid,pgid,args