![Bash에서 백그라운드 프로세스 수집을 연기할 수 있나요?](https://linux55.com/image/219345/Bash%EC%97%90%EC%84%9C%20%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EC%88%98%EC%A7%91%EC%9D%84%20%EC%97%B0%EA%B8%B0%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
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