기능의 병렬 실행

기능의 병렬 실행

나는 다음과 같은 3 가지 기능을 가지고 있습니다.

function WatchDog {
sleep 1

#something
}
function TempControl {
sleep 480

#somthing
}
function GPUcontrol {
sleep 480

#somethimg
}

나는 그것을 실행하고있다

WatchDog | TempControl | GPUcontrol

스크립트는 다음 위치에 있습니다.로컬 파일문서. 따라서 논리적으로 자동으로 실행되어야 합니다. 문제는 첫 번째 기능이 제대로 작동한다는 것입니다. 하지만 두 번째와 세 번째는 아직 시작되지 않았습니다. 하지만 이렇게 시작하면

sudo bash /etc/rc.local 

잘 작동합니다. 문제가 무엇입니까? init.d 디렉토리에 추가해도 같은 일이 발생합니다.

답변1

간단히 GNU를 사용하세요평행선:

export -f WatchDog && export -f TempControl && export -f GPUcontrol

parallel -j3 ::: WatchDog TempControl GPUcontrol

  • export -f <funcname>-참조할 함수 내보내기parallel

  • -j N- 달려갔다질소병렬로 작업


데모 테스트 사례:

function a () { seq -s' ' 1 10; sleep 10; }
function b () { echo {a..z}; sleep 5; }
function c () { echo {-100..-80}; sleep 10; }
export -f a && export -f b && export -f c
parallel --no-notice  -j3 ::: c b a

a b c d e f g h i j k l m n o p q r s t u v w x y z
-100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80
1 2 3 4 5 6 7 8 9 10

답변2

파이프는 한 명령의 출력을 다음 명령으로 보냅니다. &(& 기호) 를 찾고 있습니다 . 이는 프로세스를 포크하고 백그라운드에서 실행합니다. 따라서 실행하면:

WatchDog & TempControl & GPUcontrol

세 가지 모두 동시에 실행되어야 합니다.

또한 실행할 때 sudo bash /etc/rc.local병렬이 아닌 직렬로 실행한다고 생각합니다(다음 명령을 시작하기 전에 각 명령이 완료될 때까지 기다립니다). 다음과 같이 보일 것입니다:

WatchDog ; TempControl ; GPUcontrol

명령 구분 기호

;세미콜론 -command1 ; command2

command2성공 여부에 관계없이 완료 후 실행 됩니다.command1

&앰퍼샌드 -command1 & command2

이는 command1서브쉘에서 실행되며 command2동시에 실행됩니다.

||또는 논리 연산자 -command1 || command2

이것은 실행 command1되고 실행됩니다command2 오직command1실패 하면

&&AND 논리 연산자 -command1 && command2

이것은 실행 command1되고 실행됩니다command2 오직성공 하면 command1.

관련 정보