Um processo pode definir seu próprio PGID e SID com as chamadas do sistema setpgid
< href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/setsid.html"> setsid
. O grupo / sessão alvo não pode ser escolhido arbitrariamente: setpgid
só pode mover para outro grupo de processos na mesma sessão ou criar um novo grupo de processos cujo PGID é igual ao PID; setsid
só pode mover o processo para sua própria sessão, tornando o SID igual ao PID.
Essas chamadas são reservadas para o processo em si: um processo não pode alterar o PGID ou SID de outro processo, com uma exceção: um processo pode alterar o PGID de seus filhos se eles ainda estiverem executando a imagem do processo original execve
para executar um programa diferente).
Alguns sistemas podem permitir outros comportamentos, mas eu não acho que nenhum sistema Unix moderno se desvie fundamentalmente.
É possível alterar indiretamente o PGID ou SID de um processo usando um depurador para fazer o processo chamar a chamada de sistema setpgid
ou setsid
(via ptrace
). Como isso requer a permissão ptrace
, deve ser feito a partir de outro processo rodando como root ou como o mesmo usuário, e não deve haver nenhuma restrição na depuração (muitos sistemas Linux modernos requerem que o depurador seja um ancestral do debuggee).
O PID de um processo nunca muda. O PPID de um processo só pode mudar uma vez, e apenas por um motivo: quando o pai morre, o PPID muda do PID do pai para 1 (o processo é adotado por init ).
Note que em alguns sistemas, um processo pode ter diferentes valores de PID (e consequentemente também PPID / PGID / SID, já que todos eles iniciam como o PID de algum processo) dependendo de como você o observa. Por exemplo, com namespaces do Linux, cada processo tem um PID potencialmente diferente em cada espaço de nomes onde ele é visível.