Para responder à primeira parte da sua pergunta, existem vários sinalizadores que você pode adicionar ao -f
. Eles incluem -l
, -j
, -m
e -L
. Infelizmente -o <format>
não pode ser combinado com -f
.
De fato, a melhor maneira de obter exatamente o que você deseja é especificar exatamente o que você deseja, por exemplo,
ps -e -o pid,ppid,pgid,sid,user,comm
Mas você pode fechar adicionando -j
a -f
para criar ps -efj
. Isso adiciona as colunas PGID
e SID
.
Demonstrando sem o sinalizador -e
para tornar a saída mais curta, compare:
$ ps -f
UID PID PPID C STIME TTY TIME CMD
myuser 123 4513 0 18:20 pts/26 00:00:00 zsh
myuser 1282 123 0 18:20 pts/26 00:00:00 ps -f
$ ps -fj
UID PID PPID PGID SID C STIME TTY TIME CMD
myuser 123 4513 123 123 0 18:20 pts/26 00:00:00 zsh
myuser 1402 123 1402 123 0 18:20 pts/26 00:00:00 ps -fj
Para responder à segunda parte da sua pergunta, a razão ps -ef -o sid
mostra apenas seus próprios processos, ela muda para o modo BSD quando decide que suas flags não eram compatíveis com POSIX. Isso é indicado pela mensagem
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
Então, é equivalente a executar ps ef o sid
.
No modo BSD, e
significa que o ambiente do processo será impresso e f
significa "floresta". E o modo BSD é padronizado para imprimir todos os processos pertencentes ao usuário atual que tenham qualquer terminal , não apenas aqueles no terminal atual.
Tente alterar o -o sid
para -o sid,cmd
para ver os efeitos das opções e
e f
.
$ ps ef o sid
SID
12345
567
567
...
$ ps ef o sid,cmd
SID CMD
12345 -zsh USER=... LOGNAME=...
567 zsh PWD=... LANG=...
567 \_ ps ef o sid,cmd LANG=... PWD=...
...
E compare com ps u
para ver que os processos mostrados são os mesmos (acrescentei | wc -l
para brevidade).
$ ps ef o cmd | wc -l
20
$ ps u | wc -l
20