Processa o grupo (sessão) dos processos da GUI

2

De acordo com o que eu sei, o shell e seus processos filhos estão na mesma sessão que tem o mesmo terminal (controlador). Eu li que eles são processos interativos porque eles têm o mesmo terminal associado. Por enquanto, eu aceito isso, embora não pareça certo, porque a interação real é entre o usuário e o shell.

Que tal programas GUI (por exemplo, navegador, editor de texto), gerenciador de janelas e ambiente de área de trabalho? Eles são processos filhos para o X11?

Correção de

: cada pipeline de comando em um shell tem um PGID diferente. assim, os processos filhos do shell não possuem o mesmo PGID com o shell.

    
por Ron Vince 26.09.2015 / 07:32

3 respostas

1

A tradicional noção Unix da sessão faz sentido para as sessões de login em um terminal de texto .

Em uma sessão X11 (que é sessão no sentido genérico, não no sentido específico do Unix), todos os processos são normalmente descendentes de um processo líder de sessão. Este pode ser o gerenciador de sessão (se houver), o gerenciador de janelas ou o ativador (shell gráfico), se houver um. Há um processo que inicia a sessão do X11 e cuja morte termina a sessão, mas seu papel varia entre os ambientes de área de trabalho.

Você pode observar a árvore de processos com pstree (pode não fazer parte da instalação padrão) ou ps axf (somente Linux). O servidor X não faz parte do mesmo ramo da árvore que os outros programas; seu papel é apenas mediar entrada e saída, nunca está envolvido no lançamento de programas. Normalmente, você verá xinit ou um gerenciador de exibição com dois filhos, sendo um deles o servidor X e o outro é o líder da sessão X.

Alguns de seus programas GUI podem não estar anexados a essa árvore de processo, se o processo pai estiver inativo (por exemplo, porque foram iniciados em segundo plano por um script de wrapper que foi encerrado).

the real interaction is between user and the shell.

Apenas se você estiver realmente interagindo com o shell. Quando você está interagindo com outro programa em execução em um terminal, o shell não está envolvido. Entrada e saída vão diretamente entre o programa e o terminal, o shell está apenas em segundo plano esperando que o programa saia ou seja suspenso.

    
por 27.09.2015 / 03:28
0

edite: Originalmente, interpretei mal a pergunta.

O X windows é um servidor de exibição. Aplicativos cliente se comunicam com o servidor usando mensagens. Estes processos geralmente não possuem um terminal associado, já que toda a sua entrada vem do X. Se um aplicativo requer um terminal, um pseudo-terminal é criado e associado ao aplicativo, por exemplo, o gnome-shell cria um arquivo e o associa a ele. .

original: shell (com o controle de tarefa ativado) cria um grupo de processos para cada criança que ele cria. x aplicativos se comunicam com x11, ou seja, não são executados por ele.

    
por 26.09.2015 / 11:16
0

Qualquer processo regular (incluindo um GUI) pode se declarar um líder de sessão (por exemplo, em python via os.setpgrp() ) e por padrão seus filhos gerados após esse momento (e todos os seus descendentes) pertencerão ao novo grupo de sessão , não o original (exceto, é claro, aqueles que se tornam líderes de sessão). O pgid do novo grupo de sessão é tipicamente (ou sempre, não tem 100% de certeza) o pid do processo de líder da sessão autoproclamado.

Aqui está um exemplo real:

$ ps -eo pid,ppid,pgid,tty,cmd | egrep "(PPID|konsole|Running)"
  PID  PPID  PGID TT       CMD
 4841  9633  4840 pts/3    grep -E (PPID|konsole|Running)
 7375     1  7374 pts/3    konsole -p name=ROOT -e su -
 9373     1  9373 ?        kdeinit4: kdeinit4 Running...
 9489     1  9373 ?        kdeinit4: konsole [kdeinit] -session 102172181df177000142160830700000083410009_14428560
 9492     1  9373 ?        kdeinit4: konsole [kdeinit] -session 102172181df177000142901958900000018140011_14428560
 9558     1  9373 ?        kdeinit4: konsole [kdeinit] -session 102112051ed1c6000144239124800000016680010_14428560

A maioria dos konsole processos listados são iniciados pelo próprio KDE, via kdeinit (pid 9373) e herdam seu pgid 9373.

No entanto, o konsole pid 7375 (exibido no mesmo monitor e controlado pelo KDE assim como o resto dos aplicativos GUI) foi iniciado manualmente a partir do shell executado em um dos outros konsole processos. Pertence ao pgid 7374 iniciado quando este processo konsole foi bifurcado (pelo seu pai pid 7374, agora extinto, que se tornou líder de sessão na época).

Não relacionado ao terminal de controle (cada um dos shells dentro desses processos do konsole tem seu próprio tty, por exemplo, mas somente o processo konsole iniciado manualmente possui one-pty / 3, herdado de seu ancestral shell, o KDE iniciado konsole s não tem um tty).

Nota: pid == pgid == 9373 indica que 9373 é um processo auto-proclamado de líder de sessão também.

    
por 28.09.2015 / 01:11

Tags