특정 수의 프로세스를 계속 실행하는 방법은 무엇입니까?

특정 수의 프로세스를 계속 실행하는 방법은 무엇입니까?

많은 수의 .wav 파일을 .mp3로 변환하는 쉘 스크립트를 작성하려고 합니다. 나는 "find" 명령을 사용하여 찾은 다음 "lame" 명령을 사용하여 변환합니다. 간단한 for 루프를 사용하여 이를 달성할 수 있지만 이를 달성하려면 여러 병렬 프로세스를 사용해야 합니다.

예를 들어 4와 같이 프로세스 수를 정의하고 싶습니다. 각 프로세스에서 파일 변환을 시작합니다. 하나의 프로세스에서 파일 변환이 완료되면 다음 파일로 대체합니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변1

특정 시간에 실행되는 프로세스 수를 제어하려면 목록을 전달하고 및/또는 옵션을 xargs사용하는 것이 좋습니다.-n-P

답변2

make좋습니다. 당신은 Makefile다음과 같은 것이 필요합니다

%.mp3: %.wav
lame $(LAMEOPTS) $< $@

그런 다음 대상 목록을 생성합니다.

$ find . -name '*.wav' -type f | sed -e 's/\(.*\.\)wav$/all: \1mp3/' >>Makefile

이제 make스케줄러 작업에 다음을 알려주세요.

$ make -r -j4 -f Makefile

답변3

아직 아무도 GNU 병렬성을 언급하지 않았다는 사실에 놀랐습니다. 이를 사용하면 명령이 매우 간단해집니다.

find -type f -name '*.wav' -print0 | parallel -0 lame {} {.}.mp3

이를 위해서는 각 입력 파일의 확장자를 mp3. -j <i>integer</i>--dry-run 스위치는 어떤 명령이 실행될지 확인하는 데 유용합니다.

답변4

설치해 본 적이 있다면 xjobs이것이 정확히 설계된 작업 유형임을 알게 될 것입니다. 특히 -j생성되는 프로세스 수를 조정하려면 옵션 설명을 확인하세요.

관련 정보