ProgramingTip

xargs를 사용하여 메시지로 프로그램 실행

bestdevel 2020. 11. 23. 19:45
반응형

xargs를 사용하여 메시지로 프로그램 실행


현재 펼쳐져 있습니다.

#!/bin/bash
# script.sh

for i in {0..99}; do
   script-to-run.sh input/ output/ $i
done

xargs를 사용하여 전송로 실행하고 싶습니다. 나는 시도했다

script.sh | xargs -P8

그러나 위의 작업은 한 번에 한 번만 실행됩니다. -n8도 운이 없습니다. 펼쳐서 루프에서 연장 행 끝에 &를 추가하면 펼쳐집니다. 한 번에 8 개, 총 100 개까지만 루프를 실행하는 방법은 무엇입니까?


로부터 xargs매뉴얼 페이지

이 매뉴얼 페이지는 xargs의 GNU 버전을 문서화합니다. xargs는 공백 (큰 따옴표 또는 작은 따옴표 또는 백 슬래시로 보호 될 수 있음) 또는 줄 바꿈으로 구분 된 표준 입력에서 항목을 읽고 그 모든 이니셜-인수와 함께 명령 번 이상을 실행합니다. 표준 입력에서 읽은 항목별로 다릅니다. 표준 입력의 빈 줄은 무시됩니다.

즉, 예제 xargs에서는 전개의 모든 출력을 기다리고 수집 한 다음 echo <that output>. 그다지 유용하지도 않고 원하는 것이 아닙니다.

-n인수는 입력으로부터 많은 항목이 (여기 전달 처리에 대해, 그 자체로, 아무것도) 실행하지 않고 각 명령을 사용하는 방법입니다.

당신이 원하는 것을 말하는 것을 다음 xargs과 같은 것을해야 할 것입니다.

printf %s\\n {0..99} | xargs -n 1 -P 8 script-to-run.sh input/ output/

이렇게 분해됩니다.

  • printf %s\\n {0..99}-에서 0까지 한 줄에 하나씩 번호를 인쇄 합니다 99.
  • 운영 xargs
    • 대부분 에서 실행 명령 한 줄에 하나씩 인수
    • 번에 한 최대 8 프로세스 개의 실행


GNU Parallel을 사용하면 다음을 수행 할 수 있습니다.

parallel script-to-run.sh input/ output/ {} ::: {0..99}

-P8오는가 않은 경우 추가CPU 당 하나의 코어 작업을 실행 려면 .

반대로 xargs입력 입력에 공백 '또는'(여기서는 해당되지 않음)이 포함되어 있어도 올바른 작업을 수행 합니다 . 또한 다른 작업의 출력이 함께 혼합 되지 않도록합니다 . 따라서 출력을 사용하면 두 가지 다른 직업에서 반 라인을 얻지 것입니다.

GNU Parallel은 일반적인 시스템 또는 ssh 액세스 권한이있는 여러 시스템에서 작업을 쉽게 사용할 수 있습니다.

4 개의 CPU에서 실행하려는 32 개의 서로 다른 작업이있는 경우보고 화하는 간단한 방법은 각 CPU에서 8 개의 작업을 실행하는 것입니다.

간단한 절차

대신 GNU 병렬은 하나가 완료되면 새 프로세스를 생성하여 CPU를 활성 상태로 유지하여 시간을 절약합니다.

GNU 제출

설치

GNU Parallel이 배포 용으로 패키징되지 않은 경우 루트 액세스가 필요하지 않은 개인 설치를 수행 할 수 있습니다. 다음을 수행하여 10 초 서열 완료 할 수 있습니다.

$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
   fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 3374ec53bacb199b245af2dda86df6c9
12345678 3374ec53 bacb199b 245af2dd a86df6c9
$ md5sum install.sh | grep 029a9ac06e8b5bc6052eac57b2c3c9ca
029a9ac0 6e8b5bc6 052eac57 b2c3c9ca
$ sha512sum install.sh | grep f517006d9897747bed8a4694b1acba1b
40f53af6 9e20dae5 713ba06c f517006d 9897747b ed8a4694 b1acba1b 1464beb4
60055629 3f2356f3 3e9c4e3c 76e3f3af a9db4b32 bd33322b 975696fc e6b23cfb
$ bash install.sh

다른 설치 옵션은 http://git.savannah.gnu.org/cgit/parallel.git/tree/README를 참조하십시오.

더 알아보기

더 많은 예보기 : http://www.gnu.org/software/parallel/man.html

소개 동영상보기 : https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

안내보기 : http://www.gnu.org/software/parallel/parallel_tutorial.html

지원을위한 이메일 목록에 등록 : https://lists.gnu.org/mailman/listinfo/parallel

참고 URL : https://stackoverflow.com/questions/28357997/running-programs-in-parallel-using-xargs

반응형