문맥:
사용자는 실행할 사용자 정의 스크립트를 제공합니다. 이 스크립트는 여러 GUI 프로그램, 백엔드 서비스를 시작하는 스크립트와 같은 종류 일 수 있습니다. 스크립트 작성 방법을 제어 할 수 없습니다. 이러한 스크립트는 차단 유형이 될 수 있습니다. 즉, 모든 하위 프로세스 (순차적으로 실행되는 프로그램)가 종료 될 때까지 실행 대기
#exaple of blocking script
echo "START"
first_program
second_program
echo "DONE"
또는 비 차단 유형, 즉 백그라운드에서 자식 프로세스를 포크하고 다음과 같은 것을 종료하는 유형
#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
내가 무엇을 달성하려고합니까?
사용자 제공 스크립트는 위의 두 가지 유형 중 하나이거나 둘을 혼합하여 사용할 수 있습니다. 내 임무는 스크립트를 실행하고 시작한 모든 프로세스가 종료 될 때까지 기다렸다가 노드를 종료하는 것입니다. 차단 유형의 경우 대소 문자는 간단합니다. 즉 스크립트 실행 프로세스의 PID를 가져 와서 ps -ef | grep -ef PID에 더 이상 항목이 없을 때까지 기다립니다. 비 차단 스크립트는 문제를 일으키는 스크립트입니다.
스크립트 실행으로 생성 된 모든 자식 프로세스의 PID 목록을 얻을 수있는 방법이 있습니까? 모든 조언이나 힌트는 높이 평가 될 것입니다
grep
단지 필요하지 않을 것 ps –udummy_user
입니다. 또한 프로세스 그룹을보십시오.
ps
인수 (만해야하지를 bash
하고 ps
처음에). 거기서 스크립트를 시작하십시오. 완료 후 ps | wc -l
예상 값에 도달 할 때까지 기다리 십시오.
pid$(foo.sh; echo $!)
PID를 제공 하는 스크립트를 랩핑하여foo.sh
사용할 수 있습니다ps --ppid
. 작동합니까?