Respostas:
No Linux, todo processo possui vários IDs associados, incluindo:
ID do processo (PID)
Este é um número arbitrário que identifica o processo. Todo processo tem um ID exclusivo, mas depois que o processo sai e o processo pai recupera o status de saída, o ID do processo é liberado para ser reutilizado por um novo processo.
ID do processo pai (PPID)
Este é apenas o PID do processo que iniciou o processo em questão.
ID do grupo de processos (PGID)
Este é apenas o PID do líder do grupo de processos. Se PID == PGID, esse processo é um líder de grupo de processos.
ID da sessão (SID)
Este é apenas o PID do líder da sessão. Se PID == SID, esse processo é um líder de sessão.
Sessões e grupos de processos são apenas maneiras de tratar vários processos relacionados como uma unidade. Todos os membros de um grupo de processos sempre pertencem à mesma sessão, mas uma sessão pode ter vários grupos de processos.
Normalmente, um shell será um líder de sessão e todo pipeline executado por esse shell será um grupo de processos. Isso facilita a matança dos filhos de uma concha quando ela sai. (Veja a saída (3) para detalhes sangrentos.)
Não acho que exista um termo especial para um membro de uma sessão ou grupo de processos que não seja o líder.
Um líder de sessão é um processo em que a identificação da sessão == identificação do processo. Isso parece artificial, mas o ID da sessão é herdado pelos processos filhos. Algumas operações no UNIX / Linux operam em sessões de processo, por exemplo, negando a identificação do processo ao enviar para a chamada ou comando kill system. O uso mais comum para isso é ao sair de um shell. O sistema operacional enviará kill -HUP -$$
, o que enviará um sinal SIGHUP (hangup) para todos os processos com o mesmo ID de sessão que o shell. Quando você rejeita um processo, a identificação da sessão do processo é alterada do shell, para que não responda ao sinal de interrupção. Esta é uma parte do processo para se tornar um processo daemon.
A maioria dos processos chamados no gerenciador de janelas / ambiente gráfico tem o mesmo ID de sessão que um dos programas de inicialização. Isso permite que o sistema operacional execute a mesma kill -HUP -$$
operação em todos os programas: como o navegador, o music player, o libreoffice, o cliente de mensagens instantâneas, etc. Esses são os processos que não são líderes de sessão.
Eu pensei que sabia a resposta para isso, mas escrevi um programa em C para descobrir isso.
#include <stdio.h>
#include <unistd.h>
int
main(int ac, char **av)
{
pid_t sid, mypid, pgid, gid;
mypid = getpid();
sid = getsid(0);
pgid = getpgid(0);
gid = getpgrp();
printf("PID %d\n", mypid);
printf("process group ID of session leader: %d\n", sid);
printf("process group ID: %d\n", pgid);
printf("process group ID: %d\n", gid);
if (!fork())
{
mypid = getpid();
sid = getsid(0);
pgid = getpgid(0);
gid = getpgrp();
printf("child PID %d\n", mypid);
printf("process group ID of session leader: %d\n", sid);
printf("process group ID: %d\n", pgid);
printf("process group ID: %d\n", gid);
_exit(0);
}
return 0;
}
Compilei-o com cc -g -o sid sid.c
algumas maneiras diferentes, para ver o que acontece:
./sid
nohup ./sid > sid.out
setsid ./sid
Fiquei meio surpreso com o que o Linux (2.6.39) retribuiu. Também encontrei a página de manual da seção 7, "credenciais".
Meu conselho é fazer man 7 credentials
(ou o equivalente, se não no Linux), e ler a seção sobre grupo de processos e sessão para ver se você consegue entender.
./sid
e nohup ./sid
, e quando você corre setsid ./sid
, o id de sessão (SID) é novo e é o mesmo que o processo PID ... Eu m não tenho certeza porque nohup impediu o garfo (ou parece), mas eu acho que eu tenho a idéia geral ...
ps xao pid,ppid,pgid,sid,comm
para visualizar esses IDs.