실행 중인 프로세스의 PID, PPID, SID를 변경할 수 있는 방법이 있습니까? 대답이 '아니요'라는 것이 합리적이지만 확인하고 싶었습니다.
답변1
프로세스는 시스템 호출을 통해 자체 PGID 및 SID를 설정할 수 있습니다.setpgid
setsid
. 대상 그룹/세션은 임의로 선택할 수 없습니다. setpgid
동일한 세션의 다른 프로세스 그룹으로만 이동할 수 있으며, PID와 동일한 PGID를 사용하여 새 프로세스 그룹을 생성할 수만 있으므로 setsid
SID가 PID와 같도록 프로세스를 자체 세션으로 이동할 수만 있습니다. .
이러한 호출은 프로세스 자체에 예약되어 있습니다. 프로세스는 한 가지 예외를 제외하고 다른 프로세스의 PGID 또는 SID를 변경할 수 없습니다. 프로세스는 원래 프로세스 이미지를 계속 실행 중인 경우 하위 프로세스의 PGID를 변경할 수 있습니다. execve
다른 프로세스) 프로그램을 실행합니다 .
일부 시스템은 다른 동작을 허용할 수 있지만 현대 Unix 시스템은 근본적으로 이에서 벗어날 것이라고 생각하지 않습니다.
디버거를 사용하여 프로세스 호출 setpgid
이나 setsid
시스템 호출을 수행합니다.ptrace
). 이 작업에는 권한이 필요하므로 ptrace
루트 또는 동일한 사용자로 실행되는 다른 프로세스에서 수행해야 하며 디버깅에 대한 제한이 없습니다(많은 최신 Linux 시스템에서는 디버거가 디버기의 조상이어야 함).
프로세스의 PID는 절대 변경되지 않습니다. 프로세스의 PPID는 한 번만 변경할 수 있으며 이유는 단 하나입니다. 상위 프로세스가 종료되면 PPID는 상위 프로세스의 PID에서 1로 변경됩니다(프로세스가 채택됨).내부에).
일부 시스템 프로세스에서는 보는 방법에 따라 서로 다른 PID 값(따라서 PPID/PGID/SID도 모두 특정 프로세스의 PID로 시작하므로)을 가질 수 있습니다. 예를 들어 Linux 네임스페이스의 경우 각 프로세스는 표시되는 모든 네임스페이스에서 잠재적으로 다른 PID를 갖습니다.