![기능의 병렬 실행](https://linux55.com/image/118414/%EA%B8%B0%EB%8A%A5%EC%9D%98%20%EB%B3%91%EB%A0%AC%20%EC%8B%A4%ED%96%89.png)
나는 다음과 같은 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
.