実行中のプロセスのPID、PPID、SIDを変更する方法はありますか?答えが「いいえ」というのが合理的ですが、確認したかったです。
ベストアンサー1
プロセスは、システムコールを介して独自のPGIDとSIDを設定できます。setpgid
setsid
。ターゲットグループ/セッションは任意に選択できません。setpgid
同じセッション内の別のプロセスグループにのみ移動でき、PIDと同じPGIDを使用して新しいプロセスグループを作成するだけで、setsid
SIDがPIDと等しくなるようにプロセスを独自のセッションに移動できます。 。
これらの呼び出しはプロセス自体に予約されています。プロセスは、1つの例外を除き、他のプロセスのPGIDまたはSIDを変更することはできません。プロセスは、元のプロセスイメージを引き続き実行している場合は、子プロセスのPGIDを変更できます。execve
他のプロセス)プログラムを実行します。
いくつかのシステムは他の動作を可能にするかもしれませんが、現代のUnixシステムは本質的にこれから抜け出すとは思いません。
デバッガを使用してプロセス呼び出しsetpgid
またはsetsid
システム呼び出しを実行します。ptrace
)。これには権限が必要なため、ptrace
rootまたは同じユーザーで実行されている他のプロセスで実行する必要があり、デバッグに制限はありません(多くの最新のLinuxシステムでは、デバッガはデバッガの祖先である必要があります)。
プロセスのPIDは決して変更されません。プロセスのPPIDは一度だけ変更でき、理由は1つだけです。親プロセスが終了すると、PPIDは親プロセスのPIDから1に変更されます(プロセスが採用されています)。内部に)。
一部のシステムプロセスでは、表示方法によって異なるPID値(したがって、PPID / PGID / SIDはすべて特定のプロセスのPIDで始まるため)を持つことができます。たとえば、Linuxネームスペースの場合、各プロセスは表示されるすべてのネームスペースで異なるPIDを持つ可能性があります。