차이점은 무엇입니까
$ nohup foo
과
$ foo &
과
$ foo &
$ disown
foo &!
처음부터 그것을 부인하는 동일해야한다.
foo & disown
즉시 제거합니다.
setsid
, 그리고 어떻게 관련 disown
과nohup
차이점은 무엇입니까
$ nohup foo
과
$ foo &
과
$ foo &
$ disown
foo &!
처음부터 그것을 부인하는 동일해야한다.
foo & disown
즉시 제거합니다.
setsid
, 그리고 어떻게 관련 disown
과nohup
답변:
먼저 프로그램을 대화식 쉘 (터미널에 연결됨)에서 시작 &
하거나 리디렉션없이 시작하면 어떻게되는지 살펴 보겠습니다 . 방금 입력했다고 가정 해 봅시다 foo
.
foo
가 생성됩니다.SIGHUP
로 a SIGHUP
를 보냅니다 (일반적으로 프로세스가 종료됩니다).이제 프로세스를 백그라운드에 넣는 경우, 즉 다음을 입력하면 어떻게되는지 봅시다 foo &
.
foo
가 생성됩니다.jobs
액세스 할 수 있습니다 .%n
n
fg
,이 경우 사용하지 않았던 것처럼 계속됩니다 &
(표준 입력에서 읽기로 인해 중지 된 경우 이제 터미널에서 계속 읽을 수 있음).SIGHUP
로을 보냅니다 SIGHUP
. 쉘 및 쉘에 대해 설정된 옵션에 따라 쉘을 종료 할 때 SIGHUP
프로세스로 전송합니다 .이제 disown
쉘의 작업 목록에서 작업을 제거하므로 위의 모든 하위 지점은 더 이상 적용되지 않습니다 ( SIGHUP
쉘 이 보낸 프로세스 포함 ). 그러나 터미널에 여전히 연결되어 있으므로 터미널이 파괴 된 경우 ( xterm
또는 ssh
에 의해 생성 된 것과 같은 pty이고 제어 프로그램이 종료되면 xterm을 닫거나 SSH 연결을 종료하여 발생할 수 있음 ) 표준 입력에서 읽거나 표준 출력에 쓰려고하면 프로그램이 실패합니다.
무엇 nohup
합니까, 다른 한편으로는, 효과적으로 터미널에서 프로세스를 분리하는 것입니다 :
EOF
).nohup.out
하므로 터미널이 실패하더라도 프로그램이 표준 출력에 쓰지 못하므로 프로세스 쓰기가 손실되지 않습니다.SIGHUP
(따라서 이름을) 받지 못하게합니다 .참고 nohup
않습니다 되지 도 쉘의 작업 제어에서 프로세스를 제거하고 배경에 넣어하지 않습니다 (그러나 전경 때문에 nohup
작업이 더 많거나 적은 쓸모없는, 당신은 일반적으로 사용 배경에 넣어 것 &
). 예를 들어,와 달리 disown
, 쉘은 nohup 작업이 완료된 시점을 알려줍니다 (물론 이전에 쉘이 종료되지 않는 한).
요약하면 다음과 같습니다.
&
작업을 백그라운드에 넣습니다. 즉, 입력을 읽으려고 시도하는 것을 차단하고 쉘이 완료를 기다리지 않도록합니다.disown
쉘의 작업 제어에서 프로세스를 제거하지만 여전히 터미널에 연결되어 있습니다. 결과 중 하나는 쉘이을 보내지 않는다는 것 SIGHUP
입니다. 전경 작업이 실행 중일 때는 입력 할 수 없으므로 백그라운드 작업에만 적용 할 수 있습니다.nohup
터미널에서 프로세스를 분리하고 출력을 리디렉션 nohup.out
하고 차단합니다 SIGHUP
. 효과 중 하나 (이름 지정)는 프로세스가 전송 된 메시지를받지 못한다는 것 SIGHUP
입니다. 그것은 작업 제어와 완전히 독립적이며 원칙적으로 전경 작업에도 사용될 수 있습니다 (매우 유용하지는 않지만).nohup
시작한 터미널이 닫힐 때 왜 Google 크롬 프로세스가 닫히지 않는지 궁금합니다 .
disown %1
과 disown -h %1
? 두 번째는 터미널이 종료 될 때까지 정규 작업으로 유지하지만 HUP 신호를 무시합니까?
(foo&)
subshell을 포함 할 가치가 있습니다
를 사용 &
하면 프로그램이 백그라운드에서 실행되므로 프로그램이 끝날 때까지 차단하는 대신 새로운 쉘 프롬프트가 표시됩니다. nohup
와 disown
크게 관련이없는; SIGHUP (hangup) 신호를 억제하므로 제어 터미널을 닫을 때 프로그램이 자동으로 종료되지 않습니다. nohup
작업이 처음 시작될 때이를 수행합니다. nohup
작업이 시작될 때 작업 이 아닌 경우 disown
실행중인 작업을 수정하는 데 사용할 수 있습니다 . 인수없이 현재 작업을 수정합니다.이 작업은 배경 작업이었습니다.
nohup
그리고 disown
둘 다 SIGHUP
다른 방법으로 억제한다고 말할 수 있습니다 . nohup
프로그램이 신호를 처음에 무시하도록합니다 (프로그램이이를 변경할 수 있음). nohup
또한 SIGHUP
터미널을 닫을 때 커널 이 전송하지 않도록 제어 터미널이없는 프로그램을 프로그램에 배치하려고 시도합니다 . disown
순전히 껍질의 내부; 쉘 SIGHUP
이 종료 될 때 쉘이 전송되지 않게합니다 .
disown
작업 목록에서 작업 을 제거하는 것과 관련된 @ ShawnJ.Goff의 의견에 대한 설명입니다 . 옵션을 지정하지 않으면 작업 목록에서 옵션이 제거됩니다. 그러나-h
옵션 을 지정하면 각 작업 스펙이 테이블에서 제거 되지 않습니다 . 대신, SIGHUP
쉘이을 수신하면 작업으로 전송되지 않도록합니다 SIGHUP
.
&
그것을 분리, 당신에게 터미널을 제공하지 않습니다 stdin
과정에서 백그라운드에서 실행되도록 원인이 있지만, 모두 stdout
와 stderr
여전히 현재 청각 장애에 연결되어 있습니다. 이것은 다른 프로그램의 텍스트를 함께 섞을 수 있음을 의미하며, gimp &
다른 tty를 사용하려고 시도하는 동안 많은 GTK + 오류가 발생 하면 상당히 성 가실 수 있습니다 .
종료되지 않은 명령 (예 :)에 따라 백그라운드에서 soffice를 실행하려는 경험이 있습니다 tail
. 이 예제에서는을 사용 sleep 100
합니다.
#!/bin/bash
/opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100
내가 볼 soffice를의 로그 / 눌러 Ctrl- Csoffice를 멈추고
#!/bin/bash
nohup /opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100
나는 보이지 않는 soffice를의 로그 / 눌러 Ctrl- Csoffice를 멈추고
#!/bin/bash
/opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard & disown
sleep 100
내가 볼 soffice를의 로그 / 눌러 Ctrl- Csoffice를 멈추고
#!/bin/bash
setsid /opt/libreoffice4.4/program/soffice -invisible -nofirststartwizard &
sleep 100
내가 볼 soffice를의 로그가 / 눌러 Ctrl- Csoffice를이 멈추지 않는다
공간을 절약하려면
nohup setsid ..
: 로그를 표시하지 않습니다 / soffice를가 에 멈추지 않는다 Ctrl-C
nohup
로 & disown
말 : 로그를 표시하지 않습니다 / soffice를이에 중지 Ctrl-C
nohup ⟨command⟩ & disown
위해 만든 프로세스로 멈추지 않습니다 Ctrl+C
.
soffice
? soffice
명령이 다른 것으로 보입니다. 그래서 여기에 규칙 예외로 추가하는 것을 고려했습니다. 예를 들어 :을 사용할 때 정상적으로 nohup .. &
누르면 Ctrl-c
명령이 중지되지 않지만 명령이 중지 soffice
됩니다. 나는 누군가가 이것을 밟을 때까지 기다렸다가 왜 이것이 soffice에서 일어나는지 설명합니다. :)
nohup soffice &
및 프레스 Ctrl+C
. 예상대로 아무 일도 일어나지 않았습니다.