nohup은 어떻게 작동하나요?

nohup은 어떻게 작동하나요?

제가 이해하는 바는 이와 같은 프로세스 신호를 차단하려면 SIGHUP신호가 전송되는 프로세스 내에서 이를 수행해야 한다는 것입니다. 그러나 Unix 계열 셸에서는 bash이 명령을 사용하여 하위 프로세스를 생성하고 HUP상위 프로세스에서 하위 프로세스의 신호를 차단할 수 있습니다 nohup. 어떻게 작동하나요? nohup신호를 차단한 다음 포크하지 않고 하위 프로세스를 실행해야 합니까 ? 이것이 내가 생각할 수 있는 유일한 방법이다.

답변1

구현 소스 코드를 살펴보면 nohup,예를 들어암소 비슷한 일종의 영양coreutils버전. 수많은 설정이 있으며 그 중 일부는 국제화 목적이고 나머지는 다양한 리디렉션 옵션을 처리하기 위한 것입니다. 그러면 실제 "nohupping"이 발생합니다.

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

짐작할 수 있듯이 이는 HUP 신호를 무시하도록 프로세스를 설정한 다음 exec요청된 명령을 실행합니다.

답변2

사용된 동작은 nohup단순히 생성된 프로세스의 PPID를 1(init)로 변경하여 셸이 종료될 때 더 이상 셸의 하위 프로세스가 아니므로 HUP를 받지 않도록 하는 것입니다.

편집: 때로는 게시하기 전에 더 생각해 봐야 할 때도 있습니다. 내 부끄러움을 상기시키기 위해 여기에 남겨 둡니다 :-(

관련 정보