먼저이 질문은 관련이 있지만 분명히이 좋은 질문과 동일하지는 않습니다.
나는 무언가를 이해하고 싶다 : '&'를 할 때, 나는 올바르게 분기하고 있습니까?
"nohup ... &"을하는 것이 유용한가요? 아니면 간단하고 충분합니까?
누군가 '&'를 사용하고 여전히 'nohup'을 사용하려는 경우를 보여줄 수 있습니까?
먼저이 질문은 관련이 있지만 분명히이 좋은 질문과 동일하지는 않습니다.
나는 무언가를 이해하고 싶다 : '&'를 할 때, 나는 올바르게 분기하고 있습니까?
"nohup ... &"을하는 것이 유용한가요? 아니면 간단하고 충분합니까?
누군가 '&'를 사용하고 여전히 'nohup'을 사용하려는 경우를 보여줄 수 있습니까?
답변:
우선, 명령을 실행할 때마다 셸은 실행 여부에 관계없이 새 프로세스를 분기합니다 &
. &
백그라운드에서 실행 중임을 의미합니다.
이것은 매우 정확하지 않습니다. cd
쉘 기능과 같은 일부 명령 은 일반적으로 새 프로세스를 분기하지 않습니다. type cmd
일반적으로 cmd
외부 명령인지 쉘 기능 인지를 알려줍니다 . type type
그 type
자체가 쉘 함수 라는 것을 알려줍니다 .
nohup
다른 것입니다. 새 프로세스에 무시하도록 지시합니다 SIGHUP
. 상위 쉘이 닫힐 때 커널이 보내는 신호입니다.
질문에 대답하려면 다음을 수행하십시오.
emacs &
(기본적으로 별도의 X 창에서 실행되어야 함) .exit
.emacs
백그라운드에서 실행 되더라도 창이 종료 된 것을 알 수 있습니다. 이것이 기본 동작이며 nohup
정확하게 수정하는 데 사용됩니다.
백그라운드에서 작업을 실행하면 ( &
또는 bg
다른 쉘에도 다른 구문이있을 것입니다) 현대 시스템의 기능에서 멀티 태스킹에 이르는 쉘 기능입니다. 대신 당신이 발사하려는 모든 프로그램, 현대 쉘에 대한 새로운 쉘 인스턴스를 분기의 ( bash
, zsh
, ksh
, ...) 프로그램 (또는 목록을 관리 할 수있을 것이다 작업 ). 한 번에 하나만 포 그라운드에 있을 수 있습니다 . 즉, 쉘 포커스를 얻습니다. 누군가 전경에서 실행되는 프로세스와 백그라운드에서 실행되는 프로세스 (주요 프로세스는 stdin
/ 에 필요함 stdout
) 의 차이점을 더 확장 할 수 있기를 바랍니다 .
어쨌든 이것은 자식 프로세스가 반응하는 방식에 영향을 미치지 않습니다 SIGHUP
. nohup
그렇습니다.
SIGHUP
수신 할 때 자식 프로세스로 보냅니다 SIGHUP
. bash에는 종료시 자식 huponexit
에게 보내도록 하는 옵션 이 SIGHUP
있지만 기본적으로 활성화되어 있지 않습니다. gnu.org/software/bash/manual/bashref.html#Signals
&
쉘을 닫았습니다 exit
. 프로세스가 여전히 실행 중입니다. 왜 죽지 않았는 지에 대한 아이디어가 있습니까? 아니면 여기에 뭔가 빠졌습니까?
하는 것이 유용한가요 nohup ... &
? 예. 로 "백그라운드에서"프로세스를 시작하면 &
새 프로세스는 여전히 원래 쉘의 "프로세스 그룹"에 멤버십이 있습니다. 해당 쉘 또는 프로세스 그룹이 특정 신호 (예 : SIGHUP)를 받으면 기본적으로 종료됩니다. 즉 &
, xterm 또는 rxvt 또는 다른 윈도우 터미널 에뮬레이터로 시작한 쉘에서 프로세스를 실행 하면 창을 닫을 때 백그라운드 프로세스가 SIGHUP을 얻습니다. 일반적으로 작성된 코드는 SIGHUP을 처리하지 않으므로 종료됩니다.
그렇게 nohup ... &
하면 nohup
명령이 SIGHUP을 무시하도록 설정 한 다음 명령을 실행합니다. 새로 실행 된 명령 nohup
은 명령 자체에서 신호 처리를하지 않는 한 설정 한 신호 마스크를 유지합니다 . xterm 또는 rxvt 등을 닫으면 커널은 SIGHUP을 명령 프로세스로 전달합니다.이 과정은 무시됩니다. 계속 작동합니다.
nohup
명령을 수행하면 xterm을 닫거나 로그 오프 한 후에도 명령을 계속 실행할 수 있습니다.
&
with nohup
를 사용 nohup
하면 사용 하지 않는 특정 인스턴스에서 명령 이 계속 실행 된다고 말하는가 ? 여기에 대한 답변과 충돌하는 것 같습니다 : unix.stackexchange.com/a/288064/1822
nohup
전과 몇 가지 일을 exec()
갈래 프로세스가 특정 신호를 무시하기 위해 시스템 호출. 예, "&"는 특정 상황에서 평범 nohup
하지 않은 명령을 실행할 수있게합니다 . nohup을 수행 한 쉘과 연관된 xterm을 닫거나 로그 오프하는 것과 같습니다.
리눅스 운영 체제에서 백그라운드로 (& 접미사로) 프로그램을 실행하고 그 후에도 계속 로그 아웃하면 다음과 같이 실행하십시오.
ping google.com > ping_result &
다시 로그인 한 후 ping_result
계속 증가 하는 출력 파일의 줄 수를 확인하면 여전히 실행 중이지만 닫힐 것이라는 메시지가 표시됩니다. 그런 다음 nohup
command 사용은 무엇입니까 ?
nohup emac &
->에 대해 위에서 언급 한 것처럼 emac
시스템 로그 아웃 후에도 계속 실행되지만 다시 로그인 한 후에는 실행되지 않는 다른 시나리오 ==> .
nohup
. 어떤 부분이 혼란 스러웠습니까?