O que são líderes de sessão, como no ps -d
qual seleciona todos os processos, exceto líderes de sessão?
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.
ps xao pid,ppid,pgid,sid,comm
para visualizar esses IDs.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.fonte
Eu pensei que sabia a resposta para isso, mas escrevi um programa em C para descobrir isso.
Compilei-o com
cc -g -o sid sid.c
algumas maneiras diferentes, para ver o que acontece: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.fonte
./sid
enohup ./sid
, e quando você corresetsid ./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 ...