Comportamento estranho de 'ps -o pgid'

2

Intro: Eu tenho um daemon, que gera processos e eu tenho que parar tudo graciosamente. A solução que encontrei na web com base no pgid:

group_id=$(ps -o pgid= $(cat $pidfile))
if [ ! -z $group_id ]; then
        kill -- -$group_id
    success
fi

Fiquei imaginando como isso funciona. E a primeira coisa que eu fiquei presa é obter o group_id. Não consigo entender o que está acontecendo aqui:

$ ps -o pgid= 21814
21813

$ ps -o pgid=21814
21814
3525
5180

Mas parece que eu realmente preciso do primeiro exemplo com espaço depois de "=":

$ pstree -p | grep 21814
     |-python(21814)-+-python(21815)-+-{python}(21813)

Alguém pode explicar o que está acontecendo aqui? O que eu recebo como saída desses exemplos?

    
por Sergius 20.10.2015 / 15:48

1 resposta

2

O símbolo de igual após um sinalizador de formato ( -o format ) suprime a impressão do cabeçalho que nomeia as colunas da opção produzidas como a saída. Isso permite testar resultados nulos (vazios).

Por padrão, ps seleciona todos os processos com o mesmo ID de usuário efetivo do usuário atual da sessão de terminal. Especificar o PID de interesse após o símbolo = infere que a linha de cabeçalho contém esse PID. Os outros processos relatados são aqueles para sua sessão de terminal --- bash e o processo ps em si. Você pode ver isso se você fizer:

ps -o comm,pgid=21814
    
por 20.10.2015 / 16:44