목적을 알고 싶습니다.nohup
요즘에는.
이 글을 읽었기 때문에 묻습니다.
Nohup은 "No Hangups"의 약어입니다. 실행하는 별도의 명령이 아닙니다. Nohup은 다른 명령이 시작된 후에 Linux 시스템을 중지하지 않도록 지시하는 보충 명령입니다. 즉, 시작한 사용자가 로그오프하더라도 완료될 때까지 계속 실행됩니다. nohup의 구문은 간단하며 다음과 같습니다.
nohup sh your-script.sh &
명령 끝에 있는 "&"를 참고하세요. 그러면 명령이 배경으로 이동하여 사용 중이던 터미널이 해제됩니다.
Nohup은 터미널에서 실행하는 거의 모든 명령과 함께 작동합니다. 표준 시스템 명령 및 명령줄 유틸리티는 물론 사용자 정의 스크립트를 사용하여 실행할 수 있습니다.
SLES 11.4 또는 RHEL/CentOS 7.x와 같은 Linux 배포판을 사용하면 다음이 가능합니다.
- SSH를 통해 네트워크를 통해 Linux에 원격 로그인
- 아래의 간단한 프로그램이나 다음을 수행하는 다른 프로그램을 실행하세요.
./a.out &
- Linux를 종료하고 putty SSH 터미널에 종료를 입력하세요.
- 아래 예제 프로그램이나 bash, csh 또는 tcsh를 포함한 다른 쉘 스크립트는 없이도 잘 작동합니다.
nohup
- SSH 세션을 닫으려면 putty에 exit를 입력하세요. 이것이 로그아웃과 동일하다고 가정합니까?
오늘날 어떤 목적이나 가치가 있습니까 nouhup
? 커널 >= 3.x인가요? 내가 기억할 수 있는 한(커널 >= 2.6), 나는 그것을 사용한 적이 없으며 항상 아무런 문제 없이 nohup
사용해 왔습니다 .&
누군가 나에게 실제 nohup
사용 시나리오를 제공할 수 있습니까?
#include <stdlib.h>
#include <stdio.h>
/*
sample C code, to print numbers to a file named zz.tmp
the numbers 0 to 29 over 30 seconds
*/
int main ( int argc, char *argv[] )
{
FILE *fp;
int i;
i = 0;
fp = fopen("zz.tmp", "w" );
while ( i < 30 )
{
fprintf( fp, "%d\n", i++ );
sleep( 1 );
}
fclose( fp );
return 0;
}
mysleep.sh
#!/bin/bash
sleep 1000
Centos 7.7, 키보드와 마우스를 사용한 optiplex PC 로그인에서 내 계정은 bash입니다. 나는 이렇게 하고 nohup ./mysleep.sh
그다음에는컨트롤-Z. 입력하면서 jobs
보니[1]+ Stopped nohup ./mysleep.sh
A는 ps -ef | grep mysleep
프로세스ID가 존재한다고 나오는데, 오른쪽 상단의 X를 통해 터미널 창을 닫으면 프로세스가 사라져서 작동하지 않는 것 같은데요 nohup
?
답변1
SSH를 통해 네트워크를 통해 Linux에 원격으로 로그인합니다. Linux에서 로그아웃하고
exit
putty SSH 터미널에 입력합니다.누군가 나에게 실제
nohup
사용 시나리오를 제공할 수 있습니까?
틀림없이. 쉘이 bash라고 가정하면(아래 이유 참조), exit
또는 을 입력하는 대신 줄 시작 부분에 입력하면 ssh 클라이언트 ^D
가~.
연결을 끊다:
$ ssh localhost
ssh$ sleep 3600 &
[1] 5765
ssh$ ~.
ssh$ Connection to localhost closed.
$ ps 5765
PID TTY STAT TIME COMMAND
대신 프로그램을 사용할 수 있습니다 sleep
. ~.
연결을 끊는 대신 SSH 클라이언트를 종료하거나 실행 중인 컴퓨터를 충돌시킬 수 있습니다. 귀하의 프로세스가 살아남기를 원하십니까? 사용 nohup
;-)
연결을 끊으면 반대쪽 끝을 관리하는 서버 프로세스가 종료되어 커널(모든 Unix/Linux 커널)이 ssh에서 생성된 의사 터미널을 해체하고 SIGHUP
세션 리더(bash 쉘)에 신호를 보냅니다.배쉬 매뉴얼:
SIGHUP
대화형 셸은 종료하기 전에SIGHUP
실행 중이거나 중지된 모든 작업을 다시 보냅니다. 중지된 작업을 보내서SIGCONT
수신되었는지 확인하세요SIGHUP
.
많은 사람들이 이것에 대해 혼란스러워합니다.배쉬 기능그리고ㅏ)커널에 의해 구현된 일반 작업 제어는 SIGCONT
/ SIGHUP
쌍만 보냅니다.중지됨, 그 정도는 아니다달리기직업[1] 그리고비)또 다른 bash 함수( shopt -s huponexit
)는로그인SIGHUP
exit
bash 쉘은 정상적으로 종료되더라도(예: via 를 통해 ) 해당 작업에 a 를 보냅니다.
[1] 하나중지됨작업은 중지된 프로세스가 하나 이상 포함된 작업(= 프로세스 그룹)입니다. ㅏ프로세스SIGTSTP
신호 로 인해 정지 SIGSTOP
하거나 SIGTTIN
신호를 기다리는 기본 동작입니다 SIGTTOU
. 차단 시스템 호출(예: , , 등)에서 "휴면" 상태인 프로세스는 중지된 것으로 간주 read
되지 않고 실행 중인 것으로 간주 nanosleep
됩니다 .select
nohup
항상 도움이 되지 않는 이유
nohup
SIGHUP
무시하고 일부 리디렉션을 수행하도록 처리를 설정하면 됩니다 .보장하지 않는다다른 방법으로는 프로세스를 종료할 수 없습니다.
ㅏ)nohup ..
직업 이중지됨, 대화형 bash는 / 쌍 SIGTERM
뿐만 아니라 신호 도 보냅니다 .SIGHUP
SIGCONT
작업이 중지된 동안 bash를 종료하려고 하면 [...] 쉘은 경고 메시지를 인쇄합니다. [...] 중간 명령 없이 다시 종료하려고 하면 쉘은 다른 경고와 중지된 작업을 인쇄하지 않습니다. 예종료.
[종료= SIGTERM
신호를 보냈습니다. 이것은 또 다른 ksh/bash 기능이며 모든 쉘에는 없습니다.]
이 모든 것은 이중 분기 및 새 세션 생성과 같은 간단한 트릭으로 해결될 수 있지만 setsid(1)
,
비) systemd
SIGTERM
해당 설정이 켜져 있으면 SIGKILL
나머지 프로세스를 강제 종료하여(뒤에) 로그아웃된 세션을 "정리" 할 수도 있습니다 KillUserProcesses
. 이는 일부 배포판의 기본값입니다.
답변2
나는 항상 nohup을 가난한 사람의 데몬으로 생각했습니다.
이 사람들도 마찬가지입니다:
https://stackoverflow.com/questions/958249/whats-the-difference-Between-nohup-and-a-daemon
이는 쉘 데몬을 작성하는 방법으로 사용됩니다.