nohup 및 disown 설정에도 불구하고 bash가 로그아웃 후에도 프로그램에 SIGTERM을 보내는 이유는 무엇입니까?

nohup 및 disown 설정에도 불구하고 bash가 로그아웃 후에도 프로그램에 SIGTERM을 보내는 이유는 무엇입니까?

SSH 세션에서 로그아웃한 후에도 계속되는 프로그램을 실행하고 싶습니다.

나는 시도했다:

nohup myProg > /tmp/logfile 2>&1 &
disown %1

그리고

systemd-run --scope --user myProg -p > /tmp/logfile 2>&1  &

두 경우 모두 프로세스는 자신을 시작한 bash 프로세스로부터 SIGTERM을 받습니다.

(이 프로그램은 sigaction신호 처리에 사용되며 신호를 보내는 PID를 식별합니다)

struct sigaction sigActionInfo;
sigActionInfo.sa_sigaction = DvsRebuildInfoFiles::signalHandler;
sigActionInfo.sa_flags = SA_SIGINFO;
sigemptyset(&sigActionInfo.sa_mask);
sigaction(SIGINT,  &sigActionInfo, 0);
sigaction(SIGTERM, &sigActionInfo, 0);

그리고

DvsRebuildInfoFiles::signalHandler(int sigNo, siginfo_t *sigInfo, void *context)
{
    pid_t sendingPid = sigInfo->si_pid;
    printf("DvsRebuildInfoFiles: Received Signal %d from process %d\n", sigNo, sendingPid);
}

다른 터미널 세션에서 로그 파일을 보면 해당 파일이 bash전송 되었음을 확인할 수 있습니다 SIGTERM.

# ps -lf
F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 S root      858355  858354  0  80   0 - 59839 -      03:40 pts/0    00:00:00 -bash
0 S root      858530  858355 12  80   0 - 944937 -     03:40 pts/0    00:00:01 ./DvsRebuildInfoFiles -p
0 S root      858906  858530  0  80   0 - 55622 -      03:40 pts/0    00:00:00 sh -c /usr/local/dvstor/bin64/DvGetProgramList /mnt/das.a/202307
0 D root      858907  858906  0  99  19 - 35888 -      03:40 pts/0    00:00:00 /usr/local/dvstor/bin64/DvGetProgramList /mnt/das.a/20230719.085
etc. etc. 

왜 이런 일이 발생하며 예방할 수 있나요?

노트

  1. 이것이 관련이 있는지는 모르겠지만 프로그램 자체가 많은 스레드를 시작하고 각 스레드가 차례로 통과합니다 system().

  2. 신호 처리기를 레코딩하는 것은 프로그램이 신호에 의해 중지될 수 있어야 하기 때문에 옵션이 아닙니다.

  3. /etc/systemd/logind.conf이 줄이 주석 처리되었나요?

  4. SSH를 통해 액세스합니다. 그래픽 사용자 인터페이스가 없습니다.

관련 정보