쉘 스크립트에서 각 명령의 pid를 모니터링하는 방법은 무엇입니까?

쉘 스크립트에서 각 명령의 pid를 모니터링하는 방법은 무엇입니까?

제 상황에서는 백그라운드에서 rsync와 tar를 실행하는 하나의 쉘 스크립트가 있습니다. Rsync는 파일을 전송하는 데 사용되며 tar는 rsync가 완료된 후 압축을 수행합니다. 내 문제는 rsync의 pid를 모니터링하는 방법이며 rsync의 pid가 더 이상 존재하지 않을 때 tar 명령에 시작하도록 지시하는 것입니다.

쉘 스크립트는 다음과 같습니다:

rsync data.log B/ &
tar data.tar.gz B/data.log &

답변1

매우 쉽습니다. 다음을 사용하여 pid 변수를 저장해야 합니다.

PID_1=$!

ID를 확인하려면 진행 상황이 여전히 실행 중인지 확인하려면 다음과 같이 kill -0을 실행하십시오.

while True:
     if [ 'kill -0 $PID_1' -eq 0 ]; then
         echo Process still running
     else
         echo process done

(코드가 제대로 실행되지 않으면 정말 죄송합니다. 침대에서 글을 쓰고 있었습니다 :-))

설명을 위해: 'kill -0 $PID_1'은 0 또는 분명히 1을 반환합니다. 0이면 프로세스가 실행 중이고 1이면 프로세스가 완료됩니다. 'echo $?'로 반환 코드를 확인할 수 있습니다.

이게 도움이 되길 바란다.

관련 정보