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