Bash 쉘 스크립트에서 PID를 얻는 방법

Bash 쉘 스크립트에서 PID를 얻는 방법

Docker 컨테이너를 사용하여 여러 하위 작업을 제출하는 다음 코드가 있습니다.

#!/bin/bash

for file in "all files of a given type"; do 
     docker exec -itd "docker container" "command to be executed within docker container" &
done

pidlist=$(pgrep -f "command to be executed within docker container")

for pid in $pidlist; do
    echo $pid
    wait $pid
done

내 목표는 모든 하위 작업이 완료될 때까지 스크립트가 종료되기를 기다리도록 하는 것입니다. 이 스크립트는 다른 명령과 스크립트를 포함하는 더 큰 스크립트의 일부이기 때문에 이것이 필요합니다.

그러나 내가 얻은 PID는 하위 작업을 찾기 위해 터미널에서 top을 사용할 때와 다르기 때문에 모든 하위 작업이 제출된 후에 스크립트가 종료됩니다.

답변1

명시적인 pid를 기다릴 필요가 없습니다. 스크립트가 일부 백그라운드 프로세스를 시작하는 것뿐이라면 모두 완료될 때까지 기다릴 수 있습니다. 다음과 같이 시도해 보세요.

#!/bin/bash
for file in "all files of a given type"; do 
    docker exec -itd "docker container" "command to be executed within docker container" &
done

wait

이 수정된 버전의 스크립트는 일부 백그라운드 프로세스를 시작한 다음 모든 프로세스가 종료될 때까지 기다립니다.

관련 정보