Process

有沒有辦法改變正在執行的程序的程序組?

  • August 12, 2018

有沒有辦法改變正在執行的程序的PID、PPID、SID?答案是否定的是有道理的,但我想確定一下。

程序可以通過系統呼叫設置自己的 PGID 和 SID 。目標組/會話不能任意選擇:只能在同一個會話中移動到另一個程序組,或者創建一個PGID等於PID的新程序組;只能將程序移動到自己的會話中,使 SID 等於 PID。setpgid setsidsetpgid``setsid

這些呼叫保留給程序本身:一個程序不能更改另一個程序的 PGID 或 SID,但有一個例外:一個程序可以更改其子程序的 PGID,如果它們仍在執行原始程序映像(即它們沒有呼叫execve執行不同的程序)。

一些系統可能允許其他行為,但我認為任何現代 Unix 系統都不會從根本上偏離。

通過使用調試器使程序呼叫setpgidsetsid系統呼叫(通過ptrace),可以間接更改程序的 PGID 或 SID。由於這需要ptrace權限,因此必須從另一個以 root 或同一使用者身份執行的程序完成,並且對調試沒有任何限制(許多現代 Linux 系統要求調試器是被調試對象的祖先)。

程序的 PID 永遠不會改變。一個程序的 PPID 只能改變一次,而且只有一個原因:當父程序死亡時,PPID 會從父程序的 PID 變為 1(程序被init採用)。

請注意,在某些系統中,程序可能具有不同的 PID 值(因此 PPID/PGID/SID,因為它們都以某個程序的 PID 開始),具體取決於您如何看待它。例如,對於 Linux 命名空間,每個程序在其可見的每個命名空間中都有可能不同的 PID。

引用自:https://unix.stackexchange.com/questions/462188