De acordo com man ps
:
-p pidlist
Select by PID. This selects the processes whose process ID
numbers appear in pidlist. Identical to p and --pid.
-q pidlist
Select by PID (quick mode). This selects the processes
whose process ID numbers appear in pidlist. With this
option ps reads the necessary info only for the pids listed
in the pidlist and doesn't apply additional filtering
rules. The order of pids is unsorted and preserved. No
additional selection options, sorting and forest type
listings are allowed in this mode. Identical to q and
--quick-pid.
Vejo que -q
é consideravelmente mais rápido do que -p
, levando no máximo um quarto do tempo para produzir uma listagem idêntica.
Por exemplo:
$ time ps -fq "$$"
UID PID PPID C STIME TTY TIME CMD
vagrant 8115 3337 0 23:05 pts/0 00:00:00 bash
real 0m0.003s
user 0m0.001s
sys 0m0.002s
$ time ps -fp "$$"
UID PID PPID C STIME TTY TIME CMD
vagrant 8115 3337 0 23:05 pts/0 00:00:00 bash
real 0m0.013s
user 0m0.003s
sys 0m0.009s
$
Em outro sistema, observei ps -q
levar menos de um décimo do tempo de ps -p
.
No entanto, não estou usando uma listagem do tipo floresta e passei apenas um único PID para que a classificação não demore (e a classificação deve ser insignificante de qualquer maneira para listas PID moderadamente curtas). Não há regras de filtragem adicionais no meu comando.
O que tudo está ps -p
fazendo que ps -q
não está?
O que posso responder exatamente é: O que exatamente
ps -q PID
não faz?Da opção add -q/q/--quick-pid com negrito adicionado:
A opção foi projetada para ser rápida.
Confirmei usando
strace
queps -fp PID
lê informações sobre todos os processos do sistema eps -fq PID
lê apenas informações sobre um.Isso pode ser confirmado usando os seguintes comandos: