
쉘 스크립트에서 명령을 병렬로 실행하는 것이 유용한 경우가 많지만 이를 수행할 방법을 찾을 수 없습니다. 이것이 가능한가? 그렇다면 어떻게 달성할 수 있을까요? 나는 주로 fish
.
완료하는 데 오랜 시간이 걸리지만 모든 작업을 완료하는 데 걸리는 시간을 줄이기 위해 동시에 실행할 수 있거나 실행해야 하는 명령을 실행할 때 유용합니다.
답변1
가장 기본적인 접근 방식은 &
,이 다른 답변맞습니다. 또한 사용자가 원할 수도 있고 원하지 않을 수도 있는 stdin, stdout 및 stderr를 옹호 nohup
하지만 리디렉션합니다. nohup
읽다nohup
, disown
의 차이점&
그리고 현명한 결정을 내리세요.
또 다른 접근 방식은 입니다 parallel
.병렬화하려는 명령이 다음과 같은 경우 유용합니다.서로 비슷하다그리고 패턴을 만들 수 있어요.
도구의 기본 변형( moreutils
최소한데비안에서)을 사용하면 동시에 실행되는 작업 수를 제한할 수 있습니다.암소 비슷한 일종의 영양parallel
더욱 발전되었습니다. 실행하려는 작업이 출력을 생성하는 경우 다음 옵션이 특히 유용합니다.
--group
그룹 출력. 각 작업의 출력은 함께 그룹화되며 명령이 완료된 경우에만 인쇄됩니다. Stdout(표준 출력)이 먼저 나온 다음 stderr(표준 오류)이 옵니다. […]
(원천)
( --group
기본적으로 활성화되어 있으므로 일반적으로 명시적으로 사용할 필요는 없습니다.)
--keep-order
-k
출력 순서를 입력 순서와 동일하게 유지하십시오. 일반적으로 작업 출력은 작업이 완료되자마자 인쇄됩니다. [...]-k
출력이 인쇄되는 순서에만 영향을 미치며 작업이 실행되는 순서에는 영향을 미치지 않습니다.
(원천)
이를 통해 여러 작업의 결과가 정리될 것입니다. 이는 에서 얻을 수 없는 것입니다 &
. 때로는 출력에는 관심이 없지만 여전히 순서에는 관심이 있을 수 있습니다. 처럼내 이 대답여기서 GNU는 parallel
여러 프로세스를 병렬화 curl
하고 시퀀스를 유지하면서 각 프로세스의 종료 상태를 가져오는 데 사용됩니다.
데비안에서 GNU는 parallel
이름이 붙은 패키지에 있습니다 parallel
. 별도의 실행 파일로 parallel
모든 셸에서 실행할 수 있습니다.
답변2
이를 수행하는 가장 좋은 방법은 nohup
명령 앞에 오는 명령과 &
명령 끝에 추가되는 명령을 결합하는 것입니다.
핵심 목표가 무엇인지는 확실하지 않지만 도움이 되기를 바랍니다.
Linux 시스템에서 백그라운드 프로세스로 명령을 실행하려면 명령 앞에 다음을 추가해야 합니다.nohup
그리고 &
끝에 추가합니다.
따라서 최종 명령은 다음과 같습니다.
nohup [your command] &
이는 nohup
명령이 "끊기"를 무시해야 함을 의미하며 &
여기에 추가된 앰퍼샌드는 시스템에 명령을 백그라운드 프로세스로 실행하라고 지시하는 셸 명령입니다. 사용법에 대한 추가 정보여기에서 찾을 수 있습니다.
이와 같은 명령을 실행하면 프로세스가 실행되고 명령 프롬프트로 다시 돌아가며 터미널 세션을 종료하거나 해당 터미널 세션 중에 해당 명령과 관련 없는 다른 작업을 수행할 수도 있습니다.