disown
-
쉘이 종료 될 때 쉘이 권한이없는 작업으로 SIGHUP을 보내지 않도록합니다.
-
쉘의 작업 제어에서 사용하지 않는 작업을 제거합니다.
첫 번째는 두 번째의 결과입니까? 다시 말해, 쉘에서 시작된 프로세스가 쉘의 작업 제어에서 제거되면 쉘이 종료 될 때 쉘이 프로세스에 SIGHUP을 보내지 않습니까?
disown -h
여전히 쉘의 작업 제어하에 프로세스를 유지합니다. disown -h
프로세스가 여전히 쉘에서 보낸 SIGHUP을 수신하지만 프로세스가 “무시”하도록 SIGHUP의 조치를 설정 한다는 의미 입니까? 비슷합니다 nohup
.
$ sleep 123 & disown -h
[1] 26103
$ jobs
[1]+ Running sleep 123 &
$ fg 1
sleep 123
$ ^Z
[1]+ Stopped sleep 125
$ bg 1
[1]+ sleep 123 &
$ exit
$ ps aux | grep sleep
t 26103 0.0 0.0 14584 824 ? S 15:19 0:00 sleep 123
수행 disown -h
과 nohup
우리가 터미널을 사용하여 자신의 차이를 무시하는 경우 효과적으로 같은 일?
감사.
답변
nohup
그리고 disown -h
없는 정확히 같은 일.
로 disown
, 프로세스는 현재의 대화 형 쉘에서 작업 목록에서 제거됩니다. 실행 jobs
백그라운드 프로세스를 시작하고 실행 한 후 disown
쉘에서 작업으로 해당 프로세스를 표시하지 않습니다. 사용하지 않는 작업은 HUP
종료 될 때 쉘 에서을받지 않습니다 (그러나 끝 부분 참고).
을 사용 disown -h
하면 작업 목록에서 작업이 제거되지 않지만 쉘은 HUP
종료 된 경우 신호를 보내지 않습니다 (단, 참고 사항 참조).
nohup
유틸리티는 무시 HUP
신호를 주어진 유틸리티를 시작합니다. 이 유틸리티는 신호 마스크를 상속하므로 신호 nohup
도 무시합니다 HUP
. 쉘이 종료되면 프로세스는의 하위 프로세스로 유지됩니다 nohup
(및 nohup
상위로 바 re init
).
차이점은 시작한 프로세스 가 신호를 보내는 사람에 관계없이 nohup
무시 한다는 것 HUP
입니다. 처리되지 않은 프로세스는 쉘에 의해 신호 를 보내지 는 않지만 여전히 예를 들어 신호를 보낼 수 있으며이를 무시하지 않습니다.HUP
kill -s HUP <pid>
다음 HUP
과 같은 경우에만 쉘 작업으로 전송됩니다.
- 쉘이 로그인 쉘이고
huponexit
쉘 옵션이 설정되어 있거나 - 쉘 자체는
HUP
신호를받습니다.
bash
매뉴얼의 관련 비트 (내 강조) :
신호
[…]
쉘은 기본적 으로 a를 받으면
SIGHUP
종료됩니다 . 종료하기 전에 대화식 쉘은SIGHUP
실행 또는 중지 된 모든 작업에 재전송합니다 . 중지 된 작업은SIGCONT
을 수신하기 위해 전송 됩니다
SIGHUP
. 특정 작업에 신호를 보내는 쉘을 방지하기 위해, 상기와 작업 테이블에서 제거되어야disown
내장 (참조SHELL BUILTIN COMMANDS
아래) 또는 수신을 표시SIGHUP
하여disown -h
.는 IF
huponexit
쉘 옵션으로 설정되어shopt
,bash
보내는
SIGHUP
모든 작업 대화 형 로그인 쉘 종료에 있습니다.
disown [-ar] [-h] [jobspec ... | pid ... ]
옵션이 없으면
jobspec
활성 작업 테이블에서 각각 을 제거하십시오 . […]-h
옵션이 제공되면 각각jobspec
이 테이블에서 제거되지 않지만SIGHUP
쉘이을 수신 할 경우 작업으로 전송되지SIGHUP
않도록 표시 됩니다. […]
관련 :
답변
그들은 다르다:
-
disown은 활성 작업 테이블에서 작업을 제거합니다. 그런 다음 현재 작업을 계속합니다. -h를 사용하면 프로세스에 SIGHUP 이 전송 되지 않습니다 . 대신 SIGHUP을받을 때 쉘을 포함하는 쉘로 죽게됩니다.
-
nohup은 HUP를 무시합니다. 그런 다음 프로세스를 닫으면 터미널로 전달 된 모든 것이 파일로 이동합니다
nohup.out
.nohup은 POSIX에 의해 정의되지만 disown은 그렇지 않습니다.