<aside> 💡 qnx 에서는 프로세스가 종료되어도 하위 프로세스는 종료되지 않는다 종료가 실행되면 FD가 닫히고 channel이 끊긴 후 모든 메모리가 해제된다
</aside>
kill(PID, signal) 을 사용해서 종료하는 방법
주요 시그널
신호 | 설명 | 사용 예 |
---|---|---|
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으로 전환되면 터미널과 분리되어 프로세스 독립적으로 존재하게 되면서 부모 자식 프로세스간 연결이 끊어지고 오류나 터미널 출력을
/dev/null
로 리디렉션되고 fd도 닫히면서 user space에서 종료를 감지하기 어려워짐
ham을 사용하면 process 및 deamoc service의 종료를 감지가능
P_NOWAIT: