Bash에서 백그라운드 프로세스 수집을 연기할 수 있나요?

Bash에서 백그라운드 프로세스 수집을 연기할 수 있나요?

sleep 1 &bash에서 실행 하면 프로세스가 sleep종료된 직후에 프로세스가 수확됩니다. 이는 작업 제어 활성화 여부에 관계없이 발생합니다. bash가 wait다음과 같은 작업을 수행할 때까지 수확 프로세스를 지연시키는 방법이 있습니까 fg? 예를 들어:

sleep 1 &
sleep 2
ps -ef | grep defunct # I want this to show the sleep 1 process
wait
ps -ef | grep defunct # But now it should be gone

답변1

왜 이렇게 하려는지는 모르겠지만 다른 프로세스를 삽입하여 하위 프로세스를 가져온 다음 해당 프로세스를 일시 중지하여 SIGCHLD 신호를 처리할 수 없도록 할 수 있습니다. 예를 들어:

bash -c 'sleep 1 & kill -STOP $$' &
pid=$!
sleep 2
ps -ef|grep defunct
ps f
kill -CONT $pid

ps f디스플레이 T및 상태 에 대한 출력은 Z다음과 같습니다.

 8023 pts/2    S+     0:00  \_ /bin/bash mytest
 8024 pts/2    T+     0:00      \_ bash -c sleep 1 & kill -STOP $$
 8026 pts/2    Z+     0:00      |   \_ [sleep] <defunct>
 8029 pts/2    R+     0:00      \_ ps f

관련 정보