답변:
핵심은 "wait"명령입니다.
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
으로 wait
당신이 단위를 가질 수 있습니다 당신이 필요합니다 :
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
이를 수행하는 한 가지 방법이 있습니다.
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
wait
더 적합할까요?
nohup으로 프로세스를 실행하고 쉘 스크립트를 작성하여 nohup이 로그에 사용하는 nohup.out 파일을 읽을 수 있습니다.
nohup command &
nohup
아무 것도 쓰지 마십시오 nohup.out
. 단지 파일을 작성 하고 명령의 출력을 파일로 경로 재 지정합니다. (2) 명령이 출력을 생성하지 않으면에 아무것도 기록 nohup.out
되지 않으며이 아이디어는 빠르게 진행됩니다. (3) command
쓰기 출력이 되더라도 출력을 모니터링하여 종료 시점을 어떻게 알 수 있습니까?
lsof
있는지 확인하기 위해 nohup
사용 여전히 nohup.out
,하지만 난이 매우 털이 방법입니다 동의합니다.
command
달리기 시작 하면 nohup
없어진다. (1) 예, 2 년 전에 말한 내용을 반복하기 때문에 숫자를 반복 nohup
합니다 nohup.out
.에 아무 것도 쓰지 않습니다 . (5) 예, 쉘 스크립트를 작성하여 여전히 열려 lsof
있는지 확인하기 위해 반복하고 실행할 수 있습니다 nohup.out
. 그러나 그것은 다른 대답이 될 것입니다. (6) 그렇게해도 신뢰할 수 없을 것입니다. 다른 프로세스에서 nohup.out
파일을 열면 어떻게됩니까? 이 특정 프로세스가 nohup.out
열려 있는지 확인하고 싶을 것 입니다. (7) 그러나 그렇게하려고한다면 왜 프로세스가 실행 중인지 확인하지 않겠습니까?