백그라운드 프로세스의 종료 상태를 얻는 방법은 무엇입니까?

백그라운드 프로세스의 종료 상태를 얻는 방법은 무엇입니까?

2개 달리고 있어요mysqlspbash 스크립트에서. 동시에 시작하고(원격 서버에서 실행 중임) 백그라운드에 두고 완료되면 다음 단계로 이동하고 싶습니다. exit status오류가 발생할 경우를 대비해 둘 다 가져오고 싶습니다 . 이를 염두에 두고 아래 명령을 사용해 보았지만 sleep작동하지 않았습니다.

편집하다제프 샬러에 따르면답변: 제가 시도한 것은 다음과 같습니다.

givinv@87-109:~$ sleep5 & PID5=$!; exit5=$?; sleep 4 & PID4=$!; exit4=$?; wait $PID5 $PID4; echo $exit5 $exit4
[1] 29530
[2] 29531
No command 'sleep5' found, did you mean:
 Command 'sleep' from package 'coreutils' (main)
sleep5: command not found
[1]-  Exit 127                sleep5
[2]+  Done                    sleep 4
0 0
givinv@87-109:~$ unset exit5 exit4
givinv@87-109:~$ sleep5 & exit5=$?;PID5=$!; sleep 4 & exit4=$?;PID4=$!; wait $PID5 $PID4; echo $exit5 $exit4
[1] 29535
[2] 29536
No command 'sleep5' found, did you mean:
 Command 'sleep' from package 'coreutils' (main)
sleep5: command not found
[1]-  Exit 127                sleep5
[2]+  Done                    sleep 4
0 0
givinv@87-109:~$ 

sleep5가 의도적으로 배치되었습니다(잘못된 명령).0하지만 여전히 exit status. 위 명령을 실행하면 다음과 같은 줄이 표시됩니다 [1]- Exit 127 sleep5. 스크립트에서 실행할 때 이를 캡처할 수 있습니까?

exit status두 개의 명령을 실행하는 방법동시에?

답변1

~에서배쉬 매뉴얼 페이지, 강조를 위해 이탤릭체:

기다리다

wait[-n] [작업 사양 또는 pid...]

프로세스 ID pid 또는 jobspec jobspec으로 지정된 각 하위 프로세스가 종료될 때까지 기다립니다.그리고 기다린 마지막 명령의 종료 상태를 반환합니다.

배경 기호를 잘못 배치한 것 같습니다 &.

sleep5;exit5=$? & PID5=$!;$PID5를 기다립니다;echo $?;echo $exit5

5초 동안 대기 상태로 설정하고 exit5작업에 대한 작업 ID를 설정한 PID5다음 작업이 성공적으로 완료될 때까지 기다립니다 echo. 마지막 항목에는 echo빈 줄이 표시됩니다. 백그라운드 프로세스(서브셸)가 종료되어 exit5변수가 할당되지 않은(비어 있음) 상태이기 때문입니다.

아마도 이것이 당신이 원하는 것일까요?

sleep5&PID5=$!;$PID5를 기다립니다;exit5=$?;echo $exit5

백그라운드 로 전환하고 sleep 5해당 PID를 에 저장합니다 PID5. 프로세스가 종료될 때까지 기다린 다음 반환 코드를 에 캡처한 exit5다음 저장된 반환 코드를 에코합니다.

관련 정보