차이점은 무엇입니까
$ Nohup foo
과
$ foo &
과
$ foo &
$ disown
먼저 &
없이 (및 리디렉션없이) 대화식 셸 (터미널에 연결됨)에서 프로그램을 시작하면 어떻게되는지 살펴 보겠습니다. foo
을 입력했다고 가정 해 봅시다.
foo
을 실행하는 프로세스가 생성됩니다.SIGHUP
을 받으면 SIGHUP
도 프로세스로 보냅니다 (일반적으로 프로세스가 종료됩니다).이제 프로세스를 백그라운드에두면 foo &
를 입력하면 어떻게되는지 살펴 보겠습니다.
foo
을 실행하는 프로세스가 생성됩니다.jobs
과 함께 나열되며 %n
를 사용하여 액세스 할 수 있습니다 (여기서 n
은 작업 번호 임).fg
을 사용하여 포 그라운드 작업으로 전환 할 수 있습니다.이 경우 &
를 사용하지 않은 것처럼 계속됩니다 (표준 입력에서 읽으려고 시도하여 중지 된 경우). 이제 터미널에서 읽을 수 있습니다).SIGHUP
을 받으면 SIGHUP
도 프로세스에 보냅니다. 셸 및 셸에 대해 설정된 옵션에 따라 셸을 종료 할 때 프로세스에 SIGHUP
도 전송됩니다.이제 disown
은 Shell의 작업 목록에서 작업을 제거하므로 위의 모든 하위 지점은 더 이상 적용되지 않습니다 (Shell에서 SIGHUP
을 보내는 프로세스 포함). 그러나 still 은 터미널에 연결되어 있으므로 터미널이 파괴 된 경우 (xterm
또는 ssh
이고 제어 프로그램은 xterm을 닫거나 SSH 연결) 프로그램을 종료하여 종료됩니다. 표준 입력에서 읽거나 표준 출력에 쓰려고하면 즉시 실패합니다.
반면 Nohup
은 프로세스를 터미널에서 효과적으로 분리하는 것입니다.
EOF
).Nohup.out
로 리디렉션하므로 터미널이 실패하더라도 프로그램이 표준 출력에 쓰지 못하므로 프로세스 쓰기에 관계없이 손실되지 않습니다.SIGHUP
(따라서 이름)을 수신하지 못하게합니다.Nohup
은 not 쉘의 작업 제어에서 프로세스를 제거하고 백그라운드에서 프로세스를 제거하지 않습니다. 포 그라운드 Nohup
작업은 다소 쓸모가 없습니다. 일반적으로 &
를 사용하여 백그라운드에 넣습니다. 예를 들어 disown
과 달리 셸은 Nohup 작업이 완료된 시점을 알려줍니다 (물론 이전에 셸이 종료되지 않는 한).
요약하면 다음과 같습니다.
&
는 백그라운드에서 작업을 수행합니다. 즉, 입력 읽기를 차단하고 셸이 완료 될 때까지 기다리지 않습니다.disown
은 셸의 작업 제어에서 프로세스를 제거하지만 여전히 터미널에 연결되어 있습니다. 결과 중 하나는 Shell이 SIGHUP
을 보내지 않는다는 것입니다. 전경 작업이 실행 중일 때는 입력 할 수 없으므로 백그라운드 작업에만 적용 할 수 있습니다.Nohup
은 터미널에서 프로세스의 연결을 끊고 출력을 Nohup.out
로 리디렉션하고 SIGHUP
에서 보호합니다. 효과 중 하나 (이름 지정)는 프로세스가 전송 된 SIGHUP
을받지 못한다는 것입니다. 그것은 작업 제어와 완전히 독립적이며 원칙적으로 전경 작업에도 사용될 수 있습니다 (매우 유용하지는 않지만).&
는 백그라운드에서 프로그램을 실행 시키므로 프로그램이 종료 될 때까지 차단하는 대신 새로운 쉘 프롬프트가 표시됩니다. Nohup
와 disown
은 크게 관련이 없습니다. SIGHUP (hangup) 신호를 억제하므로 제어 터미널을 닫을 때 프로그램이 자동으로 종료되지 않습니다. Nohup
는 작업이 처음 시작될 때이를 수행합니다. 시작될 때 작업을 Nohup
하지 않으면 disown
를 사용하여 실행중인 작업을 수정할 수 있습니다. 인수없이 현재 작업을 수정합니다. 이것은 방금 배경 작업이었습니다.
종료되지 않은 명령 (예 : tail
)에 따라 백그라운드에서 soffice를 실행하려는 경험이 있습니다. 이 예에서는 sleep 100
.
#!/bin/bash
/opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100
I 참조 soffice logs/Ctrl-C 사무실 중지
#!/bin/bash
Nohup /opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100
I 보이지 않음 soffice logs / Ctrl-C 사무실 중지
#!/bin/bash
/opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard & disown
sleep 100
I 참조 soffice logs/Ctrl-C 사무실 중지
#!/bin/bash
setsid /opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100
I 참조 soffice logs /를 눌러 Ctrl-C 사무실 중지하지 않음
공간을 절약하려면Nohup setsid ..
: 로그/soffice를 표시하지 않습니다 정지하지 마십시오 Ctrl-CNohup
with & disown
끝에 : 로그를 표시하지 않음/사무실이 멈춤 Ctrl-C