O nome do arquivo de script Bash não aparece na lista de processos em execução

3

Eu recentemente adquiri um Raspberry Pi 3 para aprender linux e explorar o mundo dos computadores de placa única. Estou executando uma versão recente do Raspbian (não sei exatamente qual) sobre ele.

Depois de assistir alguns vídeos tutoriais, decidi explorar o teste de estresse da cpu e observar as temperaturas reportadas. O método que escolhi foi criar dois arquivos bash: infinite_loop.bash e cpu_spike.bash.

infinite_loop.bash contém um loop while infinito que faz alguma grande computação de exponenciação. cpu_spike.bash chama o infinite_loop.bash para rodar em cada um dos 4 núcleos do Pi e este script também exibe a temperatura reportada do Pi a cada 5 segundos pela duração desejada. Os scripts funcionam bem (fazendo com que todos os núcleos cheguem a 100% e produzam um aumento observado de temperatura), mas um aspecto que não é tentar matar o processo infinite_loop.bash no final do script cpu_spike.bash!

ps -A

retorna que cada nome de processo é listado como 'bash' e não 'infinite_loop.bash' ou 'infinite_loop' ou qualquer coisa que seja reconhecível. Então, no código de exemplo que eu segui, eu não posso ter a seguinte linha no final do script cpu_spike:

killall infinite_loop.bash

A linha de comando retorna o processo 'infinite_loop.bash' não encontrado

então, desde que eu vi que cada um dos processos do loop infinito era chamado de 'bash' na lista de processos em execução, eu estou usando

killall bash

no final do teste. É ruim fazer isso? Por que meus processos de loop infinito não são chamados de algo que se assemelha ao nome do script?

Por favor, veja meu código original para cpu_spike.bash abaixo:

#!/bin/bash
#get initial temp
vcgencmd measure_temp
for i in 'seq 4' ; do
    #put infinite loop on each cpu
    /bin/bash /home/pi/infinite_loop.bash &
done

#report temp every 5 seconds for 60 seconds
for value in {1..12}
do
    sleep 5s
    vcgencmd measure_temp
done
killall bash

Nota - Não sei porque a formatação dos dois loops for é diferente. O top loop foi o que obtive do exemplo que vi online e o segundo for loop é o meu próprio código de outro exemplo que vi.

    
por PhilosophStein 03.01.2018 / 17:15

2 respostas

2

Tenha em mente que scripts de shell são apenas arquivos de texto que são interpretados por, bem, um interpretador, no seu caso bash . Portanto, qualquer processo executando um script bash é basicamente uma instância de bash lendo um arquivo de texto para comandos. É por isso que todos aparecem como bash em ps .

A solução depende um pouco de como você inicia os vários scripts infinite_loop.bash . Assumindo que você faz algo como

infinite_loop.bash & # cpu 1
infinite_loop.bash & # cpu 2
infinite_loop.bash & # cpu 3
infinite_loop.bash & # cpu 4

você pode matar todos eles no final executando kill $(jobs -p) .

    
por 03.01.2018 / 17:29
1

Você está chamando bash e dá como argumento o script infinite_loop.bash para interpretar. O processo de execução é, portanto, o que você chamou, ou seja, bash

Para ter o processo nomeado como seu infinite_loop.bash , edite seu script de ativação alterando:

  /bin/bash /home/pi/infinite_loop.bash

Em:

 /home/pi/infinite_loop.bash

(Assegure-se de que este tenha uma primeira linha, como o seu script, para que seja executado por bash)

Em seguida, ele aparecerá com esse nome.

    
por 03.01.2018 / 19:44