実行中のプロセスのプロセスグループを変更する方法はありますか?

実行中のプロセスのプロセスグループを変更する方法はありますか?

実行中のプロセスのPID、PPID、SIDを変更する方法はありますか?答えが「いいえ」というのが合理的ですが、確認したかったです。

ベストアンサー1

プロセスは、システムコールを介して独自のPGIDとSIDを設定できます。setpgid setsid。ターゲットグループ/セッションは任意に選択できません。setpgid同じセッション内の別のプロセスグループにのみ移動でき、PIDと同じPGIDを使用して新しいプロセスグループを作成するだけで、setsidSIDがPIDと等しくなるようにプロセスを独自のセッションに移動できます。 。

これらの呼び出しはプロセス自体に予約されています。プロセスは、1つの例外を除き、他のプロセスのPGIDまたはSIDを変更することはできません。プロセスは、元のプロセスイメージを引き続き実行している場合は、子プロセスのPGIDを変更できます。execve他のプロセス)プログラムを実行します。

いくつかのシステムは他の動作を可能にするかもしれませんが、現代のUnixシステムは本質的にこれから抜け出すとは思いません。

デバッガを使用してプロセス呼び出しsetpgidまたはsetsidシステム呼び出しを実行します。ptrace)。これには権限が必要なため、ptracerootまたは同じユーザーで実行されている他のプロセスで実行する必要があり、デバッグに制限はありません(多くの最新のLinuxシステムでは、デバッガはデバッガの祖先である必要があります)。

プロセスのPIDは決して変更されません。プロセスのPPIDは一度だけ変更でき、理由は1つだけです。親プロセスが終了すると、PPIDは親プロセスのPIDから1に変更されます(プロセスが採用されています)。内部に)。

一部のシステムプロセスでは、表示方法によって異なるPID値(したがって、PPID / PGID / SIDはすべて特定のプロセスのPIDで始まるため)を持つことができます。たとえば、Linuxネームスペースの場合、各プロセスは表示されるすべてのネームスペースで異なるPIDを持つ可能性があります。

おすすめ記事