저는 최근 Linux를 배우고 단일 보드 컴퓨터의 세계를 탐험하기 위해 Raspberry Pi 3를 구입했습니다. 나는 최신 버전의 Raspbian을 실행하고 있습니다(어떤 버전인지는 확실하지 않음).
몇 가지 튜토리얼 비디오를 본 후 CPU 스트레스 테스트를 살펴보고 보고된 온도를 관찰하기로 결정했습니다. 내가 선택한 방법은 두 개의 bash 파일(infinity_loop.bash 및 cpu_spike.bash)을 만드는 것이었습니다.
Infinite_loop.bash에는 대규모 지수 계산을 수행하는 무한 while 루프가 포함되어 있습니다. cpu_spike.bash는 Pi의 4개 코어에서 실행하기 위해 Infinite_loop.bash를 호출합니다. 또한 이 스크립트는 원하는 기간 동안 5초마다 Pi의 보고된 온도를 표시합니다. 이 스크립트는 잘 작동하지만(모든 코어가 100%로 이동하고 관찰된 온도 상승이 발생함) 제대로 작동하지 않는 한 가지 측면이 있는데, 이는 cpu_spike가 끝날 때 Infinite_loop.bash 프로세스를 종료하려고 시도하는 것입니다. 배쉬 스크립트!
ps -A
반환된 각 프로세스 이름은 "infinite_loop.bash", "infinite_loop" 또는 인식 가능한 이름이 아닌 "bash"로 나열됩니다. 그래서 제가 따라한 예제 코드에서는허용되지 않음cpu_spike 스크립트 끝에 다음 줄이 있습니다.
killall infinite_loop.bash
명령줄에서 찾을 수 없는 'infinite_loop.bash' 프로세스를 반환합니다.
따라서 실행 중인 프로세스 목록에서 모든 무한 루프 프로세스가 "bash"라고 불리는 것을 확인했기 때문에 다음을 사용하고 있습니다.
killall bash
테스트가 끝나면. 이건 나쁘지 않은가? 내 무한 루프 프로세스가 스크립트 이름과 유사한 이름으로 호출되지 않는 이유는 무엇입니까?
아래의 원본 cpu_spike.bash 코드를 참조하세요.
#!/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
참고 - 두 for 루프의 형식이 왜 다른지 잘 모르겠습니다. 위쪽 루프는 온라인에서 본 예제에서 얻은 루프이고, 두 번째 for 루프는 내가 본 다른 예제에서 얻은 코드입니다.
답변1
귀하의 경우 쉘 스크립트는 인터프리터에 의해 해석되는 텍스트 파일일 뿐이라는 점을 기억하십시오 bash
. 따라서 bash 스크립트를 실행하는 모든 프로세스는 기본적으로 bash
명령 텍스트 파일을 읽는 인스턴스입니다. 그렇기 때문에 모두 bash
로 표시됩니다 ps
.
솔루션은 infinite_loop.bash
실제로 다양한 스크립트를 실행하는 방법에 따라 다소 다릅니다. 당신이 다음과 같은 일을했다고 가정 해 봅시다
infinite_loop.bash & # cpu 1
infinite_loop.bash & # cpu 2
infinite_loop.bash & # cpu 3
infinite_loop.bash & # cpu 4
마지막으로 를 실행하여 죽일 수 있습니다 kill $(jobs -p)
.
답변2
bash를 호출하고 해석을 위해 Infinite_loop.bash 스크립트에 대한 인수로 제공합니다. 따라서 실행 중인 프로세스를 호출합니다.bash
프로세스 이름을 yours 로 지정하려면 infinite_loop.bash
다음을 변경하여 launxhining 스크립트를 편집하세요.
/bin/bash /home/pi/infinite_loop.bash
입력하다:
/home/pi/infinite_loop.bash
(배쉬에 의해 실행되도록 스크립트와 같은 shebang 첫 번째 줄이 있는지 확인하십시오)
그러면 이 이름으로 나타납니다.