<aside> 💡 qnx 에서는 프로세스가 종료되어도 하위 프로세스는 종료되지 않는다 종료가 실행되면 FD가 닫히고 channel이 끊긴 후 모든 메모리가 해제된다

</aside>

  1. exit()로 종료
    1. 메모리나 fd 정리 없이 종료 시키는 방법
  2. atexit()
    1. 표준 스트림 닫고 출력 버퍼 플러시
    2. 동적으로 할당 된 메모리 헤제
  3. Signal 종료
    1. kill(PID, signal) 을 사용해서 종료하는 방법

    2. 주요 시그널

      신호 설명 사용 예
      SIGHUP 터미널이 닫힐 때 프로세스에 보내집니다. 일반적으로 데몬 프로세스가 설정 파일을 다시 읽도록 하거나 종료하도록 합니다. 터미널 세션이 종료되었음을 알림.
      SIGINT 인터럽트 신호로, 일반적으로 사용자에 의해 Ctrl+C를 눌러 발생합니다. 프로세스를 종료하도록 요청.
      SIGQUIT 사용자에 의해 Ctrl+\를 눌러 발생합니다. 코어 덤프를 생성하고 프로세스를 종료합니다. 디버깅을 위한 코어 덤프 생성.
      SIGILL 불법 명령이 실행될 때 발생합니다. 잘못된 기계어 코드 실행 시.
      SIGABRT abort 함수 호출에 의해 발생합니다. 프로세스를 비정상 종료.
      SIGFPE 잘못된 부동 소수점 연산이 발생할 때 발생합니다. 0으로 나누기 등.
      SIGKILL 프로세스를 즉시 종료합니다. 이 신호는 무시될 수 없습니다. 프로세스를 강제로 종료.
      SIGSEGV 잘못된 메모리 접근이 발생할 때 발생합니다. 세그먼트 오류.
      SIGPIPE 파이프의 읽기 쪽에서 종료되었는데도 쓰기를 시도할 때 발생합니다. 파이프 오류.
      SIGALRM 타이머 신호, alarm 함수 호출 후 타이머가 만료될 때 발생합니다. 시간 초과 알림.
      SIGTERM 종료 요청 신호로, 프로세스 종료를 요청합니다. 프로세스는 이 신호를 처리하고 종료하기 전에 정리 작업을 할 수 있습니다. 우아한 종료 요청.
      SIGUSR1 사용자 정의 신호. 사용자 정의 작업.
      SIGUSR2 사용자 정의 신호. 사용자 정의 작업.
      SIGCHLD 자식 프로세스가 종료될 때 부모 프로세스에 보내집니다. 자식 프로세스의 상태 변화 감지.
      SIGCONT 정지된 프로세스를 계속 실행하도록 합니다. 프로세스 재개.
      SIGSTOP 프로세스를 즉시 정지시킵니다. 이 신호는 무시될 수 없습니다. 프로세스 정지.
      SIGTSTP 터미널에서 입력된 정지 신호 (Ctrl+Z). 터미널에서 프로세스 정지.
      SIGBUS 버스 오류. 메모리 접근 정렬 문제, 하드웨어 오류 등으로 발생합니다. 잘못된 주소 접근 시.
      SIGSYS 시스템 호출에 잘못된 인자가 전달되었을 때 전송됩니다. 시스템 호출의 잘못된 인자 전달.
      SIGTRAP 추적 트랩이 발생했을 때 전송됩니다. 주로 디버거가 트랩을 설정하여 프로그램 실행을 중단하고 제어를 얻을 때 사용됩니다. 디버깅 중 브레이크포인트 도달 시.
      SIGXCPU CPU 시간 제한을 초과했을 때 전송됩니다. 프로세스가 할당된 CPU 시간을 초과하면 발생합니다. 프로세스가 CPU 시간 제한을 초과했을 때.

프로세스의 Deamon 으로 전환

프로세스가 Deamon으로 전환되면 터미널과 분리되어 프로세스 독립적으로 존재하게 되면서 부모 자식 프로세스간 연결이 끊어지고 오류나 터미널 출력을 /dev/null로 리디렉션되고 fd도 닫히면서 user space에서 종료를 감지하기 어려워짐

종료 감지

High Availability Framework(ham)

ham을 사용하면 process 및 deamoc service의 종료를 감지가능

Start Process 모니터링

wait()를 통한 감지

P_NOWAIT: