답변:
nohup
프로그램을 면역 SIGHUP
하고 SIGQUIT
신호 로만 만듭니다 . 현대 쉘은 세션에서 로그 아웃 할 때 다른 신호를 보낼 수 있으므로 아래에서 실행하더라도 프로그램이 종료되지 않을 것이라는 보장은 없습니다 nohup
.
더 나은 솔루션은 tmux
또는 screen
을 사용 bash
하거나을 사용 하면 다음을 시도 할 수 있습니다.
$ java -jar project.jar &
$ disown
disown
하는 경우 수동으로 리디렉션해야합니다. 예 : add</dev/null &>/dev/null
ssh localhost 'sleep 10m & disown'
. bash
종료되지 않습니다.
ssh
터미널에 연결된 프로그램이 있으면 종료되지 않는 것 같습니다 . 그러나 대화식으로 실행하면 위의 내용이 적합합니다.
(만성 역기능) 대신에 또 다른 옵션 nohup
:
setsid java -jar project.jar </dev/zero &>/dev/null &
이것은 프로세스를 효과적으로 "시연한다". 이제는 init 소유이므로 HUP를 얻지 못하고 I / O 스트림이 안전하며 백그라운드로 분기되었습니다.
자세한 내용 man setsid
은 참조하십시오. 달리 screen
거나 tmux
,이 소유권을 주장하고 계속 실행하는 프로그램이 아닙니다. 단순히 자체 프로세스 그룹 에서 프로그램을 시작합니다 .
setsid
방법으로 조금 더 바보 증거 일 것입니다. nohup에 의해 암시 된 단계를 건너 뜁니다 (init에 의해 고아로 프로세스가 재 부모되도록 함). nohup
나중에 작업을 포 그라운드하려는 경우 더 유연합니다.
또 다른 아이디어는 screen 명령을 사용하는 것입니다. 화면으로 프로그램을 시작하고 분리 및 로그 아웃 할 수 있습니다. 나중에 로그인하여 실행중인 화면 세션에 연결할 수 있습니다.
튜토리얼 : http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/
STDOUT 및 STDERR을 null로 리디렉션하여 nohup을 실행하십시오.
nohup java -jar project.jar 2>&1 &
nohup.out
).
nohup java -jar project.jar 2>/dev/null &
하지만 당신은 분명히 당신이 무엇을하고 있는지 모른다. 더 나은 피드도 stdin
/dev/null
.
stdout
및stderr
일부 파일로 시도 -닫힌 터미널stdout
/에 쓰려고 할 때 SIGHUP 이외의 신호로 인해 프로세스가 종료 될 수 있습니다stderr
. 예를 들어 작업 표시>/dev/null 2>&1
전에 명령에 추가&
하십시오.