> [!date] published: 2022-02-27
## π κ°μ
UNIX μκ·Έλμ μ΄μ©νμ¬ λ¬Έμμ΄μ μ‘μμ νλ λκ°μ νλ‘κ·Έλ¨ λ§λ€κΈ°.
## π Mandatory Part μꡬμ¬ν
1. clientμ server λΌλ μ΄λ¦μ κ°μ§ λ μ€ννμΌμ λ§λ€κΈ°.
2. μ΅λ 1κ°μ μ μλ³μλ§ μ¬μ©νκΈ°
3. μ¬μ©ν μ μλ UNIX μκ·Έλμ `SIGUSR1`κ³Ό `SIGUSR2` 2κ° λΏ.
4. λΉ λ₯΄κ² μ μ‘νκΈ° (100κΈμμ 1μ΄λ λ무 λ리λ€.)
## π Mandatory ꡬνμ μ¬μ©ν ν¨μ
### β¨ Signal κ΄λ ¨
#### kill
```c
#include <signal.h>
int kill(pid_t pid, int sig);
```
λ§€λ΄μΌ 보λ λ² `man 2 kill`
`sig`κ° μλ―Ένλ signalμ `pid`λΌλ process idλ₯Ό κ°μ§ νλ‘μΈμ€λ‘ μ μ‘νλ€.
- `pid` > 0
`sig`λ₯Ό `pid`μ λμΌν νλ‘μΈμ€ idλ₯Ό κ°μ§ νλ‘μΈμ€λ‘ μ μ‘νλ€.
- `pid` == 0
senderμ λμΌν process group idλ₯Ό κ°μ§ νλ‘μΈμ€μ λͺ¨λ `sig`λ₯Ό μ μ‘νλ€. (senderκ° μ μ‘ν μ μλ κΆνμ΄ μμ΄μΌ νλ€.)
- `pid` == -1
μ μ κ° super user κΆνμ κ°κ³ μμ κ²½μ° : μμ€ν
νλ‘μΈμ€μ νμ¬ μκ·Έλμ μ μ‘νκ³ μλ νλ‘μΈμ€λ₯Ό μ μΈν νλ‘μΈμ€λ₯Ό μ μΈν λͺ¨λ νλ‘μΈμ€μ μκ·Έλμ΄ μ μ‘λλ€.
μ μ κ° super userκ° μλ κ²½μ° : νμ¬ μκ·Έλμ μ μ‘νκ³ μλ νλ‘μΈμ€λ₯Ό μ μΈνκ³ μ μ μ κ°μ `uid`λ₯Ό κ°μ§ νλ‘μΈμ€ μ 체μκ² μκ·Έλμ μ μ‘νλ€.
λ§μ½ μ΄λ€ νλ‘μΈμ€μλ μκ·Έλμ μ μ‘νμ§ λͺ»νλλΌλ μλ¬λ λ°μνμ§ μλλ€.
- `pid` < -1
group idκ° `pid`μ μ λκ°κ³Ό κ°μ λͺ¨λ νλ‘μΈμ€μ μκ·Έλμ΄ μ μ‘λλ€.
λ°νκ°: μ±κ³΅ μ 0, μ€ν¨ μ -1
#### signal
```c
#include <signal.h>
void (*signal(int sig, void (*func)(int));)(int);
```
μ΄λ€ νλ‘μΈμ€μ μκ·Έλμ΄ λμ°©νλ€λ©΄, νλ‘μΈμ€κ° ν μ μλ μΌμ λλΆλΆ 3κ°μ§μΈλ°
- μ μλμ΄μλ κΈ°λ³Έ λμ
- νλ‘μΈμ€ μ’
λ£
- μκ·Έλ 무μ
- μ μ κ° μ μν action
signal ν¨μλ₯Ό μ΄μ©ν΄μ μμ λ΄μ©λ€μ μ€μ νλ €λ©΄ `func` μ λ΄μ©μ μ€μ νλ©΄ λλ€.
- μ μλμ΄μλ κΈ°λ³Έ λμ -> `SIG_DFL`
- μκ·Έλ 무μ -> `SIG_IGN`
- μ μ κ° μ μν action -> `func`μ ν΄λΉνλ ν¨μ μΈμλ‘ μ λ¬νκΈ°
(ν¨μ νλ‘ν νμ
μ 보면 μκ² μ§λ§ ν¨μλ₯Ό μ μν λμλ` int`ν μΈμ 1κ°λ₯Ό κ°λ ν¨μλ‘ μ μν΄μΌ νλ€.)
actionμ΄ μ±κ³΅νμ κ²½μ°μλ μ΄μ action (μλ§λ `func`μ ν¨μ ν¬μΈν°μΈ κ² κ°λ€.)μ΄ λ°νλλ€.
### β¨ Process κ΄λ ¨
#### getpid
```c
#include <unistd.h>
pid_t getpid(void);
```
νμ¬ νλ‘μΈμ€μ pidλ₯Ό λ°ννλ€.
νμ μ±κ³΅νκΈ° λλ¬Έμ errorμ λν λ°νκ°μ μλ€.
`pid_t`λ process idλ₯Ό λνλ΄κΈ° μν μλ£νμ΄κ³ `<sys/types.h>`μ μ μλμ΄ μλλ° λΆνΈ μλ μ μ μλ£νμ μλ―Ένλ€. ([c - Size of pid_t, uid_t, gid_t on Linux - Stack Overflow](https://stackoverflow.com/questions/1922761/size-of-pid-t-uid-t-gid-t-on-linux))
#### exit
```c
#include <stdlib.h>
void exit(int status);
```
λ§€λ΄μΌ 보λ λ² `man 3 exit`
νλ‘μΈμ€λ₯Ό μ’
λ£νλ ν¨μμ΄λ€.
`status` κ°μΌλ‘ `EXIT_SUCCESS`μ `EXIT_FAILURE`λ₯Ό κ°μ§ μ μλλ° κ°κ° 0κ³Ό 1λ‘ μ μλμ΄ μλ€.
## π λ¬Έμμ΄ μ μ‘ (ASCII)
2κ°μ μκ·Έλμ μ¬μ©ν μ μκΈ° λλ¬Έμ ν΄λΌμ΄μΈνΈμμ λ¬Έμμ΄μ λΉνΈ λ¨μλ‘ μͺΌκ°μ μλ² μͺ½μΌλ‘ μ μ‘ν΄μ£Όλ©΄ λλ€.
λ§λ‘ μ€λͺ
νλ κ² λ³΄λ€λ κ·Έλ¦ΌμΌλ‘ μ€λͺ
νλκ²μ΄ λ μ΄ν΄κ° μ λ κ² κ°μμ μμΈν λ΄μ©μ κ·Έλ¦ΌμΌλ‘ λμ νλ€.
![[29e18d15-ef96-41b5-9069-7ebe5bc1dbc1.png]]
## π λ°μ±..
ν΄λΌμ΄μΈνΈ μ€ν μ `pid`μ μ μ‘ν λ¬Έμμ΄μ μΈμλ‘ λ£κ² λλλ° `pid`μ λν ν
μ€νΈκ° λΆμ‘±νμ¬ νκ°μκ° μ μν ν
μ€νΈμΌμ΄μ€μμ μμκ³Ό λ€λ₯Έ κ²°κ³Όκ° λμ€λ λ¬Έμ κ° μμλ€.
μ΄λ pidμ κ°μ λ°μμ¬ λ λ¨μν `ft_atoi`λ§μ μ¬μ©νμκΈ° λλ¬ΈμΈλ° μ’ λ λ€μν μΌμ΄μ€λ€μ κ²ν ν΄λ΄€μΌλ©΄ κΈλ°© μ°Ύμ μ μλ λ¬Έμ μ¬μ μ’ μμ¬μ λ€.