Por que adicionar parênteses em torno de um nome de processo?

19

Na minha máquina ( teste Debian ), quando eu faço

ps aux | grep pam

eu obtenho

orto        609  0.0  0.0  58532  2148 ?        S    08:06   0:00 (sd-pam)  
orto       5533  0.0  0.0  12724  1948 pts/1    S+   16:51   0:00 grep pam

(sd-pam)parece um nome estranho para um processo. Ao ler este fórum , vejo que esse nome é definido de propósito pelo systemd. No código fonte , vemos

/* The child's job is to reset the PAM session on
 * termination */

/* This string must fit in 10 chars (i.e. the length
 * of "/sbin/init"), to look pretty in /bin/ps */
rename_process("(sd-pam)");

O que significa parecer bonito /bin/pse por que escolher (sd-pam)e não apenas sd-pamcomo um nome? Colocar parênteses ao redor do nome parece indicar que esse processo tem algo especial como para um thread do kernel, por exemplo [kintegrityd].

Ortomala Lokni
fonte
O que você quer dizer com "qual é o propósito de fazer isso"? É um nome, possivelmente se parece com o que faz (SessionDestroy-PAM?).
kos
Modifiquei minha pergunta levando em consideração sua observação.
Ortomala Lokni
Ah, desculpe, eu não entendi que você estava falando entre parênteses. Honestamente, eu não sei: de acordo com isso, ps coloque o nome contábil do processo entre parênteses e imprime que, se o processo a ser mostrado tiver sido renomeado, se psnão for mais capaz de encontrar o processo pelo nome original, no entanto, é claro não explica por que isso é feito no pamcódigo fonte, que não tem nada a ver ps.
kos
1
Talvez eu tenha lido o comentário de @kos subconscientemente, mas eu estava prestes a dizer que provavelmente é para evitar que as pessoas procurem em vão por um binário chamado sd-pam. Depois de ler que o ps já usa exatamente a mesma sintaxe, isso pode ser bem deliberado. Certamente, haveria outras ferramentas de listagem de processos que não adicionam colchetes. ( systemd-cgls?)
sourcejedi 01/07/2015
2
@ kos: "sd" provavelmente significa systemd, não "session destroy".
Intelfx

Respostas:

15

Colocar parênteses ao redor do nome parece indicar que esse processo tem algo especial

Existem dois casos:

  • (...)

Quando o PID 1 inicia um serviço binário, ele primeiro inicia um processo, depois ajusta os parâmetros do processo de acordo com a configuração do serviço e, finalmente, invoca execve () para executar o processo de serviço real. No período entre a bifurcação e o executivo, usamos PR_SET_NAME para alterar o nome do processo para o que será iniciado, para facilitar o mapeamento para o eventual serviço iniciado. Observe, no entanto, que há um limite de tamanho estrito no nome "comm" (ou seja, o nome do processo que eu devo definir com PR_SET_NAME, ou seja, o único "top" aparece), o que significa que precisamos truncar. Cortamos o início da string, já que geralmente o sufixo é mais interessante (caso contrário, todos os vários serviços do systemd apareceriam como "(systemd-)" - o que não é particularmente útil).

Consulte https://lists.freedesktop.org/archives/systemd-devel/2016-April/036322.html

  • (sd-pam) é o caso especial

Se gerarmos uma unidade com um 'PAMName =' não vazio, iniciaremos um processo filho dentro da unidade, conhecido como '(sd-pam)', que assiste a sessão. Aguarda a saída do processo principal e o finaliza via pam_close_session (3).

Evgeny Vereshchagin
fonte
5

O que significa ficar bonito em / bin / ps e por que escolher (sd-pam) e não apenas sd-pam como um nome? Colocar parênteses ao redor do nome parece indicar que esse processo tem algo especial

Sim, tem algo especial. Este é um nome inventado e não um nome de nenhum binário existente. Em outras palavras, não há arquivo "sd-pam" em lugar nenhum; esse processo é um fork do PID 1.

Os parênteses provavelmente devem indicar isso.

intelfx
fonte
Você sabe se existem outros processos usando a mesma convenção e se esta é uma convenção padrão?
Ortomala Lokni
@OrtomalaLokni: Não conheço nenhuma convenção para nomear esses processos. No entanto, isso não significa que não há convenções.
Intelfx