Bash 스크립트 파일 이름이 실행 중인 프로세스 목록에 나타나지 않습니다.

Bash 스크립트 파일 이름이 실행 중인 프로세스 목록에 나타나지 않습니다.

저는 최근 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 첫 번째 줄이 있는지 확인하십시오)

그러면 이 이름으로 나타납니다.

관련 정보