nohup 제어 터미널 없이 프로그램을 예약해 볼까요?

nohup 제어 터미널 없이 프로그램을 예약해 볼까요?

자일스설명하다

nohup과 disown은 모두 SIGHUP을 억제한다고 할 수 있지만 그 방식은 다릅니다. nohup은 프로그램이 처음에 신호를 무시하도록 합니다(프로그램이 이를 변경할 수 있음).nohup은 또한 제어 터미널 없이 프로그램 예약을 시도합니다., 터미널이 닫힐 때 커널이 SIGHUP을 보내지 않도록 합니다. disown은 순전히 쉘 내부에 있으며 SIGHUP을 보내지 않고 쉘이 종료됩니다.

$ nohup sleep 100 &
[1] 7882
nohup: ignoring input and appending output to 'nohup.out'
$ get-terminal-info-of-a-process.sh 7882
COMMAND                     CMD                         TT         PID  PPID CGNAME                      CGROUP                       PGID TPGID  SESS SESSION     OWNER
sleep 100                   sleep 100                   pts/5     7882  6780 systemd:/user.slice/user-10 7:pids:/user.slice/user-100  7882  7885  6780 c2          1000
$ tty
/dev/pts/5

ed 프로세스는 nohup여전히 호출하는 shell과 동일한 tty를 갖습니다 /dev/pts/5. 그래서 Gilles가 "nohup은 터미널이 닫힐 때 커널이 SIGHUP을 보내지 않도록 터미널을 제어하지 않고 프로그램을 예약하려고 시도합니다"라는 말의 의미가 무엇인지 궁금합니다.

그의 말이 사실이라면 어떻게 nohup리눅스 API나 시스템 호출 기능을 통해 제어 터미널에서 프로그램을 분리할 수 있을까?

감사해요.

답변1

나는 차례로,설명하다, 실행 중인 프로세스는 nohup여전히 로그인 세션 및 제어 터미널과 연결되어 있습니다. 결국 그것이 아니었다면 체조에는 아무 의미가 없을 것입니다.제어 터미널 정지 무시.

nohup대상 프로그램을 체인 로딩하기 전에 표준 출력을 리디렉션하고 중단 신호를 무시하는 두 가지 작업을 수행하는 간단한 체인 로더입니다.

이것은nohupFreeBSD의 코드,NetBSD에서,OpenBSD에서, 그리고TENEX C 케이스에서. 보시다시피 세션 조작이나 터미널 제어가 없습니다.

관련 정보