제가 이해하는 바는 이와 같은 프로세스 신호를 차단하려면 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를 받지 않도록 하는 것입니다.
편집: 때로는 게시하기 전에 더 생각해 봐야 할 때도 있습니다. 내 부끄러움을 상기시키기 위해 여기에 남겨 둡니다 :-(