Se o comando ps awx | grep -v grep
for executado, a saída a seguir será produzida. A lista abaixo são as últimas 20 linhas da saída completa.
4247 pts/1 Ss+ 0:00 /bin/bash
4442 ? S< 0:00 [kworker/u17:1]
4661 ? S< 0:00 [kworker/u17:3]
4731 ? S< 0:00 [kworker/u17:5]
4734 ? S 0:00 pickup -l -t fifo -u
4847 ? S< 0:00 [kworker/u17:7]
4850 ? S 0:00 [kworker/u16:3]
4878 ? S 0:00 [kworker/u16:0]
5201 ? S< 0:00 [kworker/u17:8]
5353 ? S 0:00 [kworker/0:1]
5354 ? S 0:00 [kworker/7:2]
5355 ? S 0:00 [kworker/u16:2]
5361 ? S 0:00 [kworker/4:0]
5362 tty1 Ss 0:00 -bash
5396 ? S 0:00 [kworker/6:0]
5418 ? S 0:00 [kworker/0:0]
5420 ? S 0:00 [kworker/2:2]
5431 ? S 0:00 [kworker/7:0]
5562 ? S 0:00 [kworker/4:2]
5620 tty1 R+ 0:00 ps awx
Se um comando subsequente ps awx | grep grep
for executado, a saída a seguir será gerada.
5646 tty1 S+ 0:00 grep --color=auto grep
Além disso, se o comando a seguir ps awx | grep agetty
for executado, a saída a seguir será exibida.
5669 tty1 S+ 0:00 grep --color=auto agetty
Por que o comando ps awx
não exibe os números de identificação do processo 5646 e 5669? Na verdade, não há outros processos listados após 5620.
Os processos podem ir e vir em microssegundos via
fork()
, tanto dentro do kernel quanto fora. De fato, para citar Michael Foukarakis :Então entre
ps awx | grep -v grep
eps awx | grep grep
muitas coisas aconteceram. Havia novos processos e threads - eles acabaram de sair antesps
que pudessem capturá-los. A mesma lógica ocorre em seups awx | grep grep
e último exemplo. Mas observe também que ogrep
PID pode não ser de fato o mais novo, porque, como Gilles na resposta relacionada aponta:Observe também que
grep -v grep
se destina a se remover daps
saída (e geralmente é realmente recomendável usar| grep -v [g]rep
nesse caso, consulte o post relacionado ).Porque você só começou
5646
como parte do comandops awx | grep grep
e5669
como parte dops awx | grep agetty
comando. Eles foram iniciados após essa listagem inicial, portanto, não eram visíveis nela. Ambos foram executados até terem processado a entrada dops
processo nesse pipeline específico, para que também não fossem visíveis em nenhuma listagem posterior.Da mesma forma, se você executar
ps
repetidamente, verá a alteração do ID do processo: toda vez que você executar o comando, um novo processo será iniciado.Mais especificamente, o segundo processo em questão foi este:
Isto é
grep
, que foi dado os argumentos--color=auto
eagetty
. Isso corresponde aogrep
comando emps awx | grep agetty
, o--color=auto
sinalizador provavelmente vem de algum alias. Não é umagetty
processo. Um deles provavelmente teriaagetty
ou/sbin/agetty
como a primeira parte da linha de comando, como neste exemplo de um sistema Debian: