백그라운드 프로세스를 시작하고 끝날 때 확인


40

백그라운드에서 프로세스를 시작하고 bash 스크립트 내에서 종료되는 시점을 어떻게 확인할 수 있습니까? 내 아이디어는 다음과 같은 스크립트입니다.

launch backgroundprocess &
while [ Process is running ];do
   echo "PROCESS IS RUNNING\r"
done;

echo "PROCESS TERMINATED"

답변:


66

핵심은 "wait"명령입니다.

#!/bin/bash

/my/process &
/another/process &
wait
echo "All processes done!"

7
이것의 장점 : 무한 루프로 항상 CPU 시간을 소모하지는 않습니다 ....;)
Pascal Schmiel

2
이것의 단점은 사용자에게 진행 상황을 표시하는 등 대기하는 동안 다른 작업을 수행 할 수 없다는 것입니다. cuonglm의 솔루션 만 이 가능합니다.
Mark Booth

3
@Mark Booth 세 번째 비동기 작업 진행률을 표시 할 수 있습니다. 예를 들면 :cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
윌리엄 Pursell

32

으로 wait당신이 단위를 가질 수 있습니다 당신이 필요합니다 :

sleep 1 &
PID1=$!
sleep 2 &
PID2=$!

wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'

29

이를 수행하는 한 가지 방법이 있습니다.

launch backgroundprocess &
PROC_ID=$!

while kill -0 "$PROC_ID" >/dev/null 2>&1; do
    echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0

2
고마워, 이것은 원래의 질문에 대한 나의 해석과 내가이 질문
Mark Booth

@ cuonglm, 여러 프로세스가 무엇입니까? 아마도 wait더 적합할까요?
Nishant

@cuonglm 명령을 죽일 -0 옵션은 무엇입니까
k_vishwanath

1
@k_vishwanath 프로세스가 여전히 실행 중인지 여부를보고합니다.
cuonglm

0

nohup으로 프로세스를 실행하고 쉘 스크립트를 작성하여 nohup이 로그에 사용하는 nohup.out 파일을 읽을 수 있습니다.

  nohup command &

4
(1) 머리카락이 쪼개 질 위험이 있으므로 nohup아무 것도 쓰지 마십시오 nohup.out. 단지 파일을 작성 하고 명령의 출력을 파일로 경로 재 지정합니다. (2) 명령이 출력을 생성하지 않으면에 아무것도 기록 nohup.out되지 않으며이 아이디어는 빠르게 진행됩니다. (3) command쓰기 출력이 되더라도 출력을 모니터링하여 종료 시점을 어떻게 알 수 있습니까?
G-Man, 'Reinstate

@ 아마의 출력을 확인하여 G 맨 lsof있는지 확인하기 위해 nohup사용 여전히 nohup.out,하지만 난이 매우 털이 방법입니다 동의합니다.
Alexej Magura

(4) command달리기 시작 하면 nohup없어진다. (1) 예, 2 년 전에 말한 내용을 반복하기 때문에 숫자를 반복 nohup합니다 nohup.out.에 아무 것도 쓰지 않습니다 . (5) 예, 쉘 스크립트를 작성하여 여전히 열려 lsof있는지 확인하기 위해 반복하고 실행할 수 있습니다 nohup.out. 그러나 그것은 다른 대답이 될 것입니다. (6) 그렇게해도 신뢰할 수 없을 것입니다. 다른 프로세스에서 nohup.out파일을 열면 어떻게됩니까? 이 특정 프로세스가 nohup.out열려 있는지 확인하고 싶을 것 입니다. (7) 그러나 그렇게하려고한다면 왜 프로세스가 실행 중인지 확인하지 않겠습니까?
G-Man, 'Reinstate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.