Um processo pode definir seu próprio PGID e SID com as chamadas do sistema . O grupo/sessão alvo não pode ser escolhido arbitrariamente: só pode passar para outro grupo de processos na mesma sessão, ou criar um novo grupo de processos cujo PGID seja igual ao PID; só pode mover o processo para sua própria sessão, tornando o SID igual ao PID.setpgidsetsidsetpgidsetsid
Essas chamadas são reservadas para o próprio processo: um processo não pode alterar o PGID ou SID de outro processo, com uma exceção: um processo pode alterar o PGID de seu filho se ainda estiver executando a imagem do processo original (ou seja, não foi chamado execvepara executar um programa diferente).
Alguns sistemas podem permitir outros comportamentos, mas 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 setpgidou setsid(via ptrace). Como isso requer ptracepermissão, deve ser feito a partir de outro processo executando como root ou como o mesmo usuário, e não deve haver nenhuma restrição na depuração (muitos sistemas Linux modernos exigem que o depurador seja um ancestral do depurador).
O PID de um processo nunca muda. O PPID de um processo pode mudar apenas uma vez, e apenas por um motivo: quando o pai morre, o PPID muda do PID do pai para 1 (o processo é adotado pelo init ).
Observe que em alguns sistemas, um processo pode ter valores de PID diferentes (e consequentemente também PPID/PGID/SID, pois todos começam como o PID de algum processo) dependendo de como você o vê. Por exemplo, com namespaces do Linux, cada processo tem um PID potencialmente diferente em cada namespace em que é visível.
Um processo pode definir seu próprio PGID e SID com as chamadas do sistema . O grupo/sessão alvo não pode ser escolhido arbitrariamente: só pode passar para outro grupo de processos na mesma sessão, ou criar um novo grupo de processos cujo PGID seja igual ao PID; só pode mover o processo para sua própria sessão, tornando o SID igual ao PID.
setpgid
setsid
setpgid
setsid
Essas chamadas são reservadas para o próprio processo: um processo não pode alterar o PGID ou SID de outro processo, com uma exceção: um processo pode alterar o PGID de seu filho se ainda estiver executando a imagem do processo original (ou seja, não foi chamado
execve
para executar um programa diferente).Alguns sistemas podem permitir outros comportamentos, mas 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
ousetsid
(viaptrace
). Como isso requerptrace
permissão, deve ser feito a partir de outro processo executando como root ou como o mesmo usuário, e não deve haver nenhuma restrição na depuração (muitos sistemas Linux modernos exigem que o depurador seja um ancestral do depurador).O PID de um processo nunca muda. O PPID de um processo pode mudar apenas uma vez, e apenas por um motivo: quando o pai morre, o PPID muda do PID do pai para 1 (o processo é adotado pelo init ).
Observe que em alguns sistemas, um processo pode ter valores de PID diferentes (e consequentemente também PPID/PGID/SID, pois todos começam como o PID de algum processo) dependendo de como você o vê. Por exemplo, com namespaces do Linux, cada processo tem um PID potencialmente diferente em cada namespace em que é visível.