실행 중인 프로세스의 프로세스 그룹을 변경하는 방법이 있습니까?

실행 중인 프로세스의 프로세스 그룹을 변경하는 방법이 있습니까?

실행 중인 프로세스의 PID, PPID, SID를 변경할 수 있는 방법이 있습니까? 대답이 '아니요'라는 것이 합리적이지만 확인하고 싶었습니다.

답변1

프로세스는 시스템 호출을 통해 자체 PGID 및 SID를 설정할 수 있습니다.setpgid setsid. 대상 그룹/세션은 임의로 선택할 수 없습니다. setpgid동일한 세션의 다른 프로세스 그룹으로만 이동할 수 있으며, PID와 동일한 PGID를 사용하여 새 프로세스 그룹을 생성할 수만 있으므로 setsidSID가 PID와 같도록 프로세스를 자체 세션으로 이동할 수만 있습니다. .

이러한 호출은 프로세스 자체에 예약되어 있습니다. 프로세스는 한 가지 예외를 제외하고 다른 프로세스의 PGID 또는 SID를 변경할 수 없습니다. 프로세스는 원래 프로세스 이미지를 계속 실행 중인 경우 하위 프로세스의 PGID를 변경할 수 있습니다. execve다른 프로세스) 프로그램을 실행합니다 .

일부 시스템은 다른 동작을 허용할 수 있지만 현대 Unix 시스템은 근본적으로 이에서 벗어날 것이라고 생각하지 않습니다.

디버거를 사용하여 프로세스 호출 setpgid이나 setsid시스템 호출을 수행합니다.ptrace). 이 작업에는 권한이 필요하므로 ptrace루트 또는 동일한 사용자로 실행되는 다른 프로세스에서 수행해야 하며 디버깅에 대한 제한이 없습니다(많은 최신 Linux 시스템에서는 디버거가 디버기의 조상이어야 함).

프로세스의 PID는 절대 변경되지 않습니다. 프로세스의 PPID는 한 번만 변경할 수 있으며 이유는 단 하나입니다. 상위 프로세스가 종료되면 PPID는 상위 프로세스의 PID에서 1로 변경됩니다(프로세스가 채택됨).내부에).

일부 시스템 프로세스에서는 보는 방법에 따라 서로 다른 PID 값(따라서 PPID/PGID/SID도 모두 특정 프로세스의 PID로 시작하므로)을 가질 수 있습니다. 예를 들어 Linux 네임스페이스의 경우 각 프로세스는 표시되는 모든 네임스페이스에서 잠재적으로 다른 PID를 갖습니다.

관련 정보