Como encontrar o PID de um loop while?

2

Eu executo este comando no terminal Bash

  while [ 0 ]; do 
    i=1; 
    echo $i; 
  done

Antes de executar este loop, em outra aba do gnome-terminal eu fiz

$ps aux | wc -l
192

Enquanto o loop ainda está em execução, fiz novamente

$ps aux | wc -l
192

Minhas perguntas -

  1. Por que o loop while não parece receber um PID?

  2. Como obter o PID de comandos individuais sendo executados dentro de um loop while?

por user13107 08.10.2015 / 03:37

2 respostas

4
  1. while não obtém seu próprio PID porque é uma palavra-chave do shell, não um comando externo. Você obterá o PID listado como bash process. Para obter o PID, insira echo $$ dentro de while loop e use ps aux | grep '[b]ash' para corresponder ao PID.

  2. Se algum comando não for um shell embutido, você pode obter o PID usando a maneira usual. usando ps , pgrep . No campo PPID (Parent Process ID), você normalmente veria o PID do shell no qual está sendo executado.

    Por exemplo. para obter detalhes sobre o comando foobar dentro de um loop de shell, você pode fazer:

    ps -ef | grep '[f]oobar'
    

    ou

    ps aux | grep '[f]oobar'
    

    ou pgrep :

    pgrep 'foobar'
    

    Conforme mais de um processo de shell for executado, você deve procurar verbosidade e verificar o campo PPID para corresponder ao PID do shell.

    Observe que, como você está em loop, a disponibilidade de qualquer processo na tabela de processos dependerá da hora em que está sendo executada e da verificação da tabela de processos.

por 08.10.2015 / 03:56
1

while e echo são comandos internos do shell bash - eles não recebem um PID separado. Tente adicionar o comando sleep 1 à sua lista de comandos. Então, você verá um novo comando em ps .

    
por 08.10.2015 / 03:53

Tags