시그널이란?
프로세스에 뭔가 발생했음을 알리는 간단한 메세지(비동기적)
대부분 커널이 프로세스로 보낸다. 무엇이 발생했는지 표시하는 "미리 정의된 상수"를 사용한다.
SIGTERM(프로그램 정상 종료,ctr-c), SIGTSTP(프로그램 일시 정지, ctr-z)
시그널 송/수신
시그널 송신
목적지 프로세스의 일부 컨텍스트를 갱신해서 시그널을 목적지 프로세스로 보낸다.
- 커널이 divide by zero를 감지한 경우
- 커널이 자식 프로세스 종료를 감지한 경우
- 다른 프로세스가 kill 을 전송해서 커널이 시그널을 보낼 것을 요청했을 때
시그널 수신
목적지 프로세스는 전달된 신호에 대해서 커널이 어떤 방식으로든 반응하여야 할 때 시그널을 수신한다고 한다.
- 무시(Ignore):아무것도 하지 않는다.
- 대상 프로세스를 종료(with optional core dome)
- 시그널 핸들러를 활용해 시그널 처리(유저 수준의 함수)
커널이 프로세스 p에게 제어를 넘길 준비가 되었을 때, pending&~blocked계산을 통해 pnb를 결정합니다.
pnb=pending이면서, blocked아닌
1. pnb가 0이면, 프로세스 p의 논리 흐름에서 다음 명령어로 제어를 넘깁니다.
2. pnb가 0이 아니면, pnb의 가장 낮은 비트 k를 선택하고, 프로세스 p가 시그널 k를 수신하게 강제합니다.
시그널 펜딩(Pending)-아직 수신되지 않은 시그널
- Pending 시그널은 최대 한번만 수신할 수 있습니다-따라서, 두번째 시그널부터는 무시됩니다
- 프로세스는 시그널을 블록(block)할 수 있습니다.
- 블록(block)된 시그널들은 전달될 수 있지만, 블록이 풀릴 때 까지 수신될 수 없습니다.
- SIGKILL(9), SIGSTOP(19)는 블록(block)될 수 없는 시그널입니다.
각 프로세스에 대하여 커널은 pending 비트 벡터내에 대기하고 있는(pending) 시그널의 집합을 관리하며,
blocked 비트 벡터 내에서 block된 시그널의 집합을 관리합니다.
프로세스 그룹
pid가 프로세스의 id라고 하면, pgid는 프로세스'그룹'의 id이다.
kill 커맨드를 통해 프로세스 혹은 프로세스 그룹을 종료할 수 있다.
'CS > OS' 카테고리의 다른 글
[운영체제] Paging과 Paging Table (0) | 2025.04.24 |
---|---|
멀티 쓰레드, 동기화(lock, monitor, synchronized) (4) | 2024.09.16 |
데몬 쓰레드(daemon thread), join, 쓰레드 그룹(쓰레드 풀 추후 작성예정) (2) | 2024.09.14 |
쓰레드의 생성과 시작(JAVA)&Black Box와 White Box 방식 (1) | 2024.09.11 |
UNIX/Linux 주요 프로세스 관련 함수&매크로 (0) | 2024.09.11 |