백그라운드에서 Bash 스크립트를 실행하고 터미널을 종료하십시오.


답변:


45

종료 신호가 터미널 및 쉘의 하위 프로세스로 전파되지 않도록하려면 다음과 같이 명령을 실행하십시오 nohup.

nohup cmd &

1
이것이 정답입니다. nohup이 없으면 시작된 프로세스는 여전히 터미널 프로세스의 "자식"으로 간주되므로 터미널이 닫히면 종료됩니다.
Izzy

3
cmd & disown는 명령 구분 기호 &처럼 취급 되기 때문에 작동합니다 ;. disown 명령은 bash 쉘 세션과 백그라운드 명령 간의 연결을 제거합니다.
lornix

2
zsh는이를위한 약칭입니다 cmd &|..
Thor

이것이 작동하려면 Terminal.app에서 환경 설정을 변경해야했습니다. 프로파일에서 활성 프로파일을 선택한 다음 쉘> 쉘이 나올 때> 쉘이 완전히 나간 경우 닫기
antoine

6

사용 screen:

screen -S <session name> -d -m <your command>

그 후에 터미널을 종료 할 수 있으며 다음을 통해 다시 연결할 수 있습니다.

screen -r <session name>

추가 정보 : 참조


4

터미널을 종료 한 후 백그라운드에서 매초마다 특정 명령이나 파일을 실행하려면이 쉬운 일을 시도 할 수 있습니다.

nohup watch -n5 'bash script.sh' &

5 초마다 scipt.sh가 실행됩니다.


1
"nohup"은 이미 허용 된 답변으로 덮여 있습니다. 그리고 나는 asker가 주기적으로 실행하지 말고 "앞으로 몇 초 후에이 명령을 실행하십시오"라고 말하기 때문에 cron을 언급했다고 확신합니다.
David Richerby

1
내 대답은 상황을 악화시키지 않습니다. 다운 투표 포인트를 참조하십시오. 신경이 충분할 것입니다.
jamietelin

3

명령 뒤에 "&"문자를 넣으십시오.

예 :

/home/your/script.sh &

7
이 경우 터미널이 닫히면 프로세스 /home/your/script.sh는 "부모"에서 분리되지 않고 "배경"으로 시작되므로 프로세스가 시작됩니다 . nohup실제로 분리하기 위해 사용하십시오 .
Izzy

나의 나쁜, 나는 그것에 대해 몰랐지만, 데비안에서 테스트했을 때, 그것을 시작한 쉘을 닫은 후에 명령이 계속 실행되었습니다 : /
Flinth

1
백그라운드 프로세스가 정확히 어디에 언제 첨부되는지 확실하지 않습니다. 그러나 예를 들어 원격 시스템에 로그인하는 경우 로그 아웃하자마자 중지됩니다 ( 데몬 자체를 제외하고는 제외 ). 따라서 100 % 확실하게하기 위해서는 오히려 nohup(이제 보이지 않는) 모든 출력을 nohup.out명령을 시작한 디렉토리에 있는 파일 에 기록합니다.
Izzy

알겠습니다, 설명해 주셔서 감사합니다 ^^
Flinth

이 답변은 jobs명령 과 결합하면 정상적으로 작동 할 수 있습니다 . 나는 종종 그것을 배경으로 한 후에 쉘 프로세스로 돌아갈 수 있기를 원합니다.
djangofan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.