Python 프로그램을 백그라운드에서 계속 실행하고 사용 중이던 SSH 연결을 종료하기 위해 이 명령을 실행했습니다.
nohup python files.py >> files.log &
ps
그런 다음 작동하는지 확인합니다.
$ ps a
PID TTY STAT TIME COMMAND
13059 pts/0 Ss 0:00 -bash
13327 pts/0 R+ 0:00 ps a
[1]+ Exit 1 nohup python files.py >> files.log
무슨 뜻이에요 [1]+ Exit 1
?
프로그램을 백그라운드에서 실행하여 올바르게 종료하려면 어떻게 해야 합니까?
답변1
bash 에서 명령 끝에 이를 사용하면 &
백그라운드에서 명령이 실행됩니다. [1]+ Exit 1
작업 1이 상태 1로 종료되었음을 나타냅니다 . 사이의 숫자 []
는 작업 번호이고 그 뒤의 숫자 Exit
는 종료 상태입니다. 종료 상태가 표시되지 않으면 명령이 상태로 종료되었음을 의미합니다 0
.
다른 명령을 실행하기 전에 이 메시지가 표시되지 않는 이유는 기본적으로 완료된 백그라운드 명령의 상태가 프롬프트가 업데이트될 때까지 표시되지 않기 때문입니다. 이는 다른 명령이 종료된 후 또는 <ENTER>
빈 프롬프트를 누를 수 있음을 의미합니다 .
편집:
또한 .Bash를 사용할 필요는 없습니다 nohup
. 쉘 자체가 HUP를 수신할 때만 프로세스를 HUP합니다. 완전히 종료하면(또는 CTRL+D를 통해 ) exit
이런 일이 발생하지 않습니다 .
그러나 disown
특정 작업이 HUP를 얻지 않도록 내장 함수를 사용하여 이를 달성할 수도 있습니다.
마지막으로 다음을 수행하여 쉘이 HUP를 얻을 때 모든 작업을 거부하도록 SIGHUP 핸들러를 설정할 수도 있습니다 function sighup { disown -a; exit 0; }; trap sighup HUP
.
답변2
Patrick의 대답은 정확하지만 Stefan의 요점은 nohup
다른 버전의 사용자에게 중요합니다. 그러나 +(더하기) 기호의 의미는 제공되지 않습니다. 여기서는 "현재" 작업을 의미합니다. 예를 들어, 한 번에 3개의 명령을 제출하려는 경우:
$ sleep 5&
[1] 29056
$ sleep 5&
[2] 29091
$ sleep 5&
[3] 29147
그런 다음 5초 동안 기다렸다가 Enter를 누르십시오. 출력은 다음과 같습니다.
[1] Done sleep 5
[2]- Done sleep 5
[3]+ Done sleep 5
Patrick이 설명했듯이 대괄호 안의 숫자는 순차적인 작업 번호입니다. +는 최근 작업에 대해서만 주어지고, -는 이전 작업에 대해서만 주어집니다. 다른 모든 직업에는 기호가 없습니다.