UFO ET IT

nohup과 데몬의 차이점은 무엇입니까?

ufoet 2020. 12. 15. 19:34
반응형

nohup과 데몬의 차이점은 무엇입니까?


스크립트를 데몬으로 실행하는 것과 nohup을 사용하는 것의 의미는 무엇입니까?

포크 프로세스 등의 측면에서 차이점이 무엇인지 알고 있지만 스크립트에 어떤 영향을 미칩니 까?


nohup명령은 데몬으로 프로세스를 실행하는 가난한 사람의 방법입니다. Bruno Ranschaert가 언급했듯이 대화 형 쉘에서 명령을 실행하면 제어 터미널이 있으며 제어 프로세스 (일반적으로 로그인 쉘)가 종료 될 때 SIGHUP (중단) 신호를 수신합니다. nohup명령은 입력이에서오고 /dev/null출력과 오류가 모두으로 이동 nohup.out하고 프로그램이 인터럽트를 무시하고 신호를 종료하고 중단 되도록 정렬합니다 . 실제로 여전히 동일한 제어 터미널이 있습니다. 터미널 제어를 무시합니다. 프로세스를 백그라운드에서 실행하려면 셸에 백그라운드에서 실행하도록 지정해야합니다. 적어도 Solaris에서는 (즉, ' nohup sleep 20 &' 를 입력 합니다. 앰퍼샌드없이 프로세스는 포 그라운드에서 동기식으로 실행됩니다. ).

일반적으로를 통해 실행되는 프로세스 nohup는 시간이 걸리지 만 다른 곳에서 상호 작용을 기다리지 않습니다.

일반적으로 (열심히 시도하면 이러한 규칙에 대한 예외를 찾을 수 있음을 의미합니다.) 데몬 프로세스는 백그라운드에 숨어 있고 터미널에서 연결이 끊긴 상태이지만 일종의 입력에 응답하기를 기다리는 것입니다. 네트워크 데몬은 연결 요청 또는 UDP 메시지가 네트워크를 통해 도착할 때까지 기다린 다음 적절한 작업을 수행하고 응답을 다시 보냅니다. 예를 들어 웹 서버 나 DBMS를 생각해보십시오.

프로세스가 완전히 데몬 화되면 nohup코드가 통과 하는 일부 단계를 거 칩니다. I / O를 재 배열하여 터미널에 연결되지 않고 프로세스 그룹에서 분리되고 적절한 신호를 무시합니다 (생성 된 신호를 보낼 터미널이 없기 때문에 신호를 무시하지 않을 수 있음을 의미 할 수 있음). 터미널을 통해). 일반적으로 한 번 분기되고 상위가 성공적으로 종료됩니다. 하위 프로세스는 일반적으로 프로세스 그룹 및 세션 ID 등을 수정 한 후 두 번째로 분기됩니다. 그러면 아이도 종료됩니다. 손자 프로세스는 이제 자율적이며 ps시작된 터미널 출력에 표시되지 않습니다 .

당신은 볼 수 유닉스 환경, 3 EDN 고급 프로그래밍 W 리처드 스티븐스와 스티븐 Rago에 의해 또는 2 EDN, 고급 유닉스 프로그래밍 daemonization의 토론 마크 J Rochkind에 의해.

나는 daemonize자신을 (제대로) 데몬 화하는 방법을 모르는 프로그램을 데몬 화하는 프로그램이 있습니다. 자체적으로 데몬 화해야했지만 제대로 작업을 수행하지 않은 프로그램의 결함을 해결하기 위해 작성되었습니다. 원하는 경우 저에게 연락하십시오-내 프로필을 참조하십시오.


데몬되기

이 링크에는 프로세스가 데몬이되기 위해 취해야하는 단계 목록이 있습니다.

https://web.archive.org/web/20120328110436/http://www.steve.org.uk/Reference/Unix/faq_2.html#SEC16

저작권으로 인해 목록을 그대로 복사 할 수는 없지만 (정보 섹션 참조) 요약은 다음과 같습니다.

  1. fork (처음)-그래서 우리는 그룹 리더가 아니므로 부모가 빠져 나가게합니다.
  2. 전화 setsid()-새로운 세션의 리더가 되십시오. 이 부름은 우리가 그룹 리더가 아닌 경우에만 작동합니다. 이 새 세션에는 제어 터미널이 없습니다.
  3. fork (두 번째)-그래서 우리는 세션 리더가 아니고 (따라서 제어 터미널을 되 찾을 수 없습니다) 부모가 빠져 나가게합니다.
  4. cd 루트 디렉터리로-따라서 다른 디렉터리가 마운트 해제되는 것을 방지하지 않습니다.
  5. umask원하는 값으로 설정 (선택 사항)-원하지 않는 마스크를 상속 할 수 있기 때문입니다.
  6. stdin, stdout, stderr을 닫습니다 (또는 다른 곳을 가리 키도록 다시 엽니 다).

안돼

무엇을 nohup:

  • stdout 및 stderr이 터미널에 연결되어 있으면 다음으로 리디렉션합니다. nohup.out
  • SIGHUP 무시

유사점과 차이점

유일한 일반적인 작업이 stdout 및 stderr을 리디렉션하는 방법을 확인하십시오. 데몬이 되려면 SIGHUP를 무시할 필요조차 없습니다.

nohup&프로세스를 배경 화 하기 위해 ' ' 를 사용할 필요가 없습니다. 즉, 여전히 ctrl-c를 사용하여 SIGINT를 보낼 수 있습니다. 프로세스는 여전히 키보드 입력에 응답합니다. 또한 stdin을 자동으로 변경하지 않으므로 " < /dev/null"을 통해 직접 수행하는 것이 좋습니다 .

nohup일반적으로 사용되는 다른 기능 (예 : 백그라운드)과 혼동하지 마십시오 . OP는에 대해 구체적으로 물었습니다 nohup.

실제로

실용성 측면에서 셸이 종료 될 때 계속되어야하는 일회성 장기 실행 프로세스를 시작하려면를 사용하고 싶을 때를 사용 nohup하고이를 stdin의 백그라운드 및 리디렉션과 결합 할 수도 있습니다. 일회성 작업은 데몬을 만들 가치가 없지만 데몬의 일부 속성은 " cd /" 와 같은 nohup 작업에 여전히 유용 할 수 있습니다 .

정기적 인 작업은 cron(또는 다른 스케줄러) 를 통해 실행하는 것이 가장 좋습니다 .

데몬은 예측 가능한 시작 시간이없는 반복되는 작업을 감독하는 데 가장 적합합니다. 일반적으로 데몬 프로세스에 대한 명확한 종료 시간은 없습니다 (사용자 / 다른 프로세스 또는 시스템 종료에 의해 명시 적으로 중지됨). 데몬은 종종 응용 프로그램 (클라이언트) 또는 기타 조건 (예 : 유닉스 select ()를 통해 IO 장치를 통해 들어오는 데이터)에 응답하는 서비스입니다. 다른 데몬은 조건을 폴링하고 응답으로 작업을 수행합니다.

터미널 제어에 관한 부록

이 페이지를 참조 하십시오 . 요약하면 제어 터미널은 stdin, stdout, stderr에 대한 무제한 액세스 권한을 부여합니다. 하나의 프로세스 그룹 만 stdin에 액세스 할 수 있습니다. 기본적으로 백그라운드 프로세스 그룹은 stdout 및 stderr에도 쓸 수 있습니다.

Also, it seems that keyboard signals sent to a terminal are only sent to the process group which has it as a controlling terminal.


In UNIX variants, a process is associated with a terminal process (login shell). So when the terminal process exits, the process is halted as well, because of this association. The nohup prevents a process from exiting when the terminal stops.

A daemon or demon is a process that is started by the system when it starts up, it runs till shutdown, no user asked for it explicitly. So by definition it is not part of a user interaction but belongs to the system.

If you have access to the system as a user, you can use nohup. If you are sysadmin, you can install a deamon process. For the process it does not matter.


A daemon can't be initiated, while nohup is initiated by the user.

ReferenceURL : https://stackoverflow.com/questions/958249/whats-the-difference-between-nohup-and-a-daemon

반응형