![쉘 스크립트에서 백그라운드 프로세스를 다시 포그라운드로 가져오는 깔끔한 방법](https://linux55.com/image/99498/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%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%EB%A5%BC%20%EB%8B%A4%EC%8B%9C%20%ED%8F%AC%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%EB%A1%9C%20%EA%B0%80%EC%A0%B8%EC%98%A4%EB%8A%94%20%EA%B9%94%EB%81%94%ED%95%9C%20%EB%B0%A9%EB%B2%95.png)
예: weblogic을 시작한 다음(계속 실행됨) 배포하는 작업 쉘 스크립트가 있습니다.
마지막으로 쉘 스크립트가 종료되지 않도록 백그라운드 프로세스를 다시 포그라운드로 가져옵니다(코드 0으로 종료).
#!/bin/bash
set -m
startWebLogic.sh &
# create resources in weblogic
# deploy war
# ...
jobs -l
fg %1
작업 제어를 허용하려면 를 사용해야 했지만 set -m
이것이 비대화형 셸에서 사용하는 가장 깔끔한 방법은 아니라는 사실도 발견했습니다.
이 문제를 처리하는 더 좋은 방법이 있나요?
답변1
내가 찾고 있는 문제를 이해하는 한 wait
:
#!/bin/bash
startWebLogic.sh &
# create resources in weblogic
# deploy war
# ...
wait
"프로세스를 전면으로 가져오지" 않습니다. 그러나 weblogic이 반환될 때까지 기다립니다. 따라서 weblogic이 종료될 때까지 쉘 스크립트는 종료되지 않습니다. 이것이 당신이 달성한 것입니다 fg %1
.
에서 help wait
:
ID(프로세스 ID 또는 작업 사양일 수 있음)로 식별되는 각 프로세스를 기다리고 해당 프로세스의 종료 상태를 보고합니다. ID가 제공되지 않으면 현재 활성화된 모든 하위 프로세스가 대기되고 상태 0이 반환됩니다.