테스트를 시작한 다음 잠시 기다렸다가 쉘 스크립트를 사용하여 프로그램을 시작하고 싶습니다.
#!/bin/bash
sleep 3 & # test
sleep 1 # wait some
sleep 4 & # run program under test
fg 1 # <-- I want to put test back in "foreground", but yields "line 5: fg: no job control"
"전경"이 무엇을 의미하는지 오해한 것 같은데, 제가 원하는 대로 할 수 있는 다른 방법이 있나요? ( jobs -x
and를 접두사로 사용해 보았지만 nohup
오해가 더 깊어지는 것 같습니다.)
답변1
셸에서 작업 제어를 활성화하면 됩니다.set -m
#!/bin/bash
set -m
sleep 3 & # test
sleep 1 # wait some
sleep 4 & # run program under test
jobs
fg %1
bash 매뉴얼을 인용하면 다음과 같습니다.
-중
모니터 모드. 작업 제어가 활성화되었습니다. 이 옵션은 이를 지원하는 시스템의 대화형 셸에 대해 기본적으로 활성화되어 있습니다(위의 작업 제어 참조). 백그라운드 프로세스는 별도의 프로세스 그룹에서 실행되며 완료되면 종료 상태가 포함된 줄을 인쇄합니다.
답변2
#!/bin/bash
sleep 3 & sleep_pid=$!
sleep 1
sleep 4 &
wait "$sleep_pid"
이를 전면에 놓는 것은 sleep 3
완료될 때까지 기다리는 것과 같습니다. 나는 이것이 당신이하고 싶은 일이라고 가정합니다 (또는 적어도 이것은영향당신이 찾고 있는 것), 그것이 바로 위의 스크립트가 하는 일입니다. 작업의 PID를 변수에 저장한 sleep_pid
다음 해당 값을 호출에 사용하여 이를 수행합니다 wait
.