쉘 스크립트 실행 시 프로세스 선호도 설정

쉘 스크립트 실행 시 프로세스 선호도 설정

다음과 같은 애플리케이션을 시작할 수 있는 스크립트(.sh)가 있습니다.

#!/bin/sh
./application1 configuration1.cfg  param1 param2 param3 &

sleep 2

./application2 configuration2.cfg  param1 param2 param3 &

sleep 2

프로세스를 시작할 때 CPU 선호도를 할당하는 방법이 있습니까?

나중에는 정말 하기 싫었어요. C++를 통해 프로그래밍 방식으로 이 작업을 수행할 수 있지만 쉘이 가장 좋은 방법인 것 같습니다.

그렇다면 부팅한 후 실제로 해당 CPU/코어에 고정되어 있는지 어떻게 확인할 수 있나요?

답변1

유틸리티 프로그램이 있는데,tasksetutil-linux의 일부인 는 이러한 목적을 위한 것입니다. 예를 들어:

taskset -c 0-15 script

실행되고 scriptID가 0~15인 CPU만 사용하도록 제한됩니다.

스크립트가 실제로 올바른 CPU에서 실행되도록 제한되어 있는지 확인하려면 파일을 보면 됩니다 . 파일 에는 (비트맵, CPU 0이 허용되는 경우 최하위 비트가 설정됨) 및 (CPU ID 목록) /proc/<pid>/status이라는 항목이 포함되어 있습니다. ).Cpus_allowedCpus_allowed_list

답변2

나 자신도 "학습 경험"을 하고 있지만 이것이 관련이 있을 수 있습니다.

특정 CPU의 백그라운드에서 bash 스크립트를 실행하려면 다음을 시도하십시오.

taskset -c 1 ./myScript &

myScript에 다음 줄을 포함합니다.

echo MyScript: $$\($BASHPID\) taskset -cp $BASHPID

$BASHPID는 나에게 새로운 것입니다. "현재 Bash 프로세스의 프로세스 ID입니다. 어떤 경우에는 $$와 다를 수 있습니다."

개인적으로 저는 특정 CPU의 백그라운드에서 bash 기능을 실행하는 데 어려움을 겪고 있습니다.

taskset -c 1 ./myFunction &

...제공: 작업 세트: myFunction을 실행할 수 없습니다: 해당 파일이나 디렉터리가 없습니다

몇 번의 잘못된 시작 후에

(taskset -cp 1 $BASHPID;myFunction)&

...유망해 보이네요.

관련 정보