나는 종종 다음과 같은 간단한 모니터링 작업을 실행합니다.
(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