다음을 수행할 수 있습니다.
nohup ./run.sh > /dev/null 2>&1 &
프로세스를 백그라운드로 보내고 출력을 삭제한 후 터미널을 닫을 수 있습니다.
스크립트 자체를 사용하여 이를 수행할 수 있습니까? 내 말은, 나는 이것을 실행할 것입니다 :
./run.sh
스크립트 어딘가에서 다음과 같은 작업을 수행할 수 있습니다.
nohup "$0" > /dev/null 2>&1 &
그러면 스크립트가 실행되면 위와 동일하게 동작합니까?
나는 이를 위해 두 개의 별도 스크립트를 가질 수 있다고 생각합니다. 그러나 단일 스크립트로 수행할 수 있습니까?
스크립트가 시스템에서 호출될 것이기 때문에 이것을 묻는 것인데, 시스템이 스크립트를 호출하는 방식을 변경하고 싶지 않고 오히려 스크립트가 실행되는 방식을 변경하고 싶습니다.
답변1
스크립트를 백그라운드에서 실행해야 하는지 결정해야 하거나 이미 백그라운드 스크립트(예: 명령줄 인수)인 경우 이를 수행할 수 있습니다.
일반적으로 스크립트를 호출한다고 가정하면
./run.sh
예를 들어 스크립트에 이미 두 번째 실행 중임을 알리기 위해 명령줄 인수를 추가하면 bg
무한한 횟수만큼(또는 시스템 리소스가 부족할 때까지) 자신을 재귀적으로 호출하지 않습니다.
./run.sh bg
이렇게 달성할 수 있습니다
#! /bin/sh
if [ "$1" = "bg" ]
then
# do the normal work
else
nohup "$0" bg > /dev/null 2>&1 &
fi