백그라운드에서 복잡한 작업을 강제로 수행하시겠습니까?

백그라운드에서 복잡한 작업을 강제로 수행하시겠습니까?

나는 종종 다음과 같은 간단한 모니터링 작업을 실행합니다.

(sleep 600 && ls -lh /path/to/files)&

프로세스 자체의 배경을 부분적으로 해제하는 것이 가능합니까? 예를 들어 작업 ID를 $jobid(또는 이와 유사한) 것으로 가져온 다음 sleep완료 되면 fg $jobid?

fg이를 위해서는 좀 더 복잡한 bash-fu가 필요할 수 있다는 것을 알고 있지만 모든 솔루션을 확인하는 것이 좋을 것입니다(특히 실행 중인 다른 대화형 프로세스가 없는 경우 에만 가능한 경우 ).

답변1

비대화형 스크립트에는 기본적으로 작업 제어가 꺼져 있지만 set -m또는 를 사용하여 활성화할 수 있습니다 set -o monitor. 예제 스크립트는 다음과 같습니다.

# turn on job control
set -o monitor

# start a background task
( sleep 10 && echo "slept 10 seconds" ) &

# do something else
sleep 5
echo "slept 5 seconds"

# bring the background task into the foreground
fg

echo "done"

추적( )을 사용하여 실행할 때의 출력은 다음과 같습니다 bash -x script.sh.

+ set -o monitor
+ sleep 5
+ sleep 10
+ echo 'slept 5 seconds'
slept 5 seconds
+ fg
( sleep 10 && echo "slept 10 seconds" )
+ echo 'slept 10 seconds'
slept 10 seconds
+ echo done
done

관련 정보