プロセスのゾンビ、シグナル

# 子プロセスのゾンビ化
これらのシステムコールはいずれも、呼び出し元プロセスの子プロセスの  状態変化を待ち、状態が変化したその子プロセスの情報を取得するのに使用される。状態変化とは以下のいずれかである:子プロセスの終了、シグナルによる子プロセスの停止、 シグナルによる子プロセスの再開。 子プロセスが終了した場合は、```wait を実行することで、 システムがその子プロセスに関連するリソースを解放```できるようになる。  ```wait が実行されなかった場合には、終了した子プロセスは 「ゾンビ」状態```で残り続ける (下記の注意の章を参照のこと)。
...
終了したが、wait されていない子プロセスは「ゾンビ」になる。 後で親プロセスが wait を実行して子プロセスについての情報を取得できるように、  カーネルはゾンビプロセスについて```最小限の情報 (PID、終了ステータス、 リソース使用状況) を保持```する。 ゾンビプロセスは、waitによってシステムから削除されない限り、 ```カーネルのプロセステーブルの1エントリーを消費する。このプロセステーブルが 一杯になると、新たにプロセスを作ることができなくなる```。 親プロセスが終了すると、その親プロセスの「ゾンビ」の   子プロセスは (もしあれば)init(1)の養子となる。```init(1)はwaitを自動的に実行し、ゾンビを削除```する。

# 出典
https://manpages.ubuntu.com/manpages/focal/ja/man2/wait.2.html#:~:text=%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%AB%E3%81%AF%E3%81%84%E3%81%9A%E3%82%8C%E3%82%82%E3%80%81%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E5%85%83%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%20%20%E7%8A%B6%E6%85%8B%E5%A4%89%E5%8C%96%E3%82%92%E5%BE%85%E3%81%A1%E3%80%81%E7%8A%B6%E6%85%8B%E3%81%8C%0A%20%20%20%20%20%20%20%E5%A4%89%E5%8C%96%E3%81%97%E3%81%9F%E3%81%9D%E3%81%AE%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AB%20%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82%20%20%E7%8A%B6%E6%85%8B%E5%A4%89%E5%8C%96%E3%81%A8%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%81%84%E3%81%9A%E3%82%8C%E3%81%8B%E3%81%A7%E3%81%82%E3%82%8B%3A%0A%20%20%20%20%20%20%20%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E7%B5%82%E4%BA%86%E3%80%81%E3%82%B7%E3%82%B0%E3%83%8A%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E5%81%9C%E6%AD%A2%E3%80%81%20%E3%82%B7%E3%82%B0%E3%83%8A%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E5%86%8D%E9%96%8B%E3%80%82%20%E5%AD%90%E3%83%97%E3%83%AD%0A%20%20%20%20%20%20%20%E3%82%BB%E3%82%B9%E3%81%8C%E7%B5%82%E4%BA%86%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81wait%20%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%20%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%8C%E3%81%9D%E3%81%AE%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AB%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%92%0A%20%20%20%20%20%20%20%E8%A7%A3%E6%94%BE%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%20%20wait%20%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AF%E3%80%81%E7%B5%82%E4%BA%86%E3%81%97%E3%81%9F%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AF%20%E3%80%8C%E3%82%BE%E3%83%B3%E3%83%93%E3%80%8D%E7%8A%B6%0A%20%20%20%20%20%20%20%E6%85%8B%E3%81%A7%E6%AE%8B%E3%82%8A%E7%B6%9A%E3%81%91%E3%82%8B%20(%E4%B8%8B%E8%A8%98%E3%81%AE%E6%B3%A8%E6%84%8F%E3%81%AE%E7%AB%A0%E3%82%92%E5%8F%82%E7%85%A7%E3%81%AE%E3%81%93%E3%81%A8)%E3%80%82

https://manpages.ubuntu.com/manpages/focal/ja/man2/wait.2.html#:~:text=%E7%B5%82%E4%BA%86%E3%81%97%E3%81%9F%E3%81%8C,%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E3%80%82

# シグナル
プロセスは基本的には```一本の実行の流れ```に沿ってひたすら実行し続けます。
...
シグナルとはあるプロセスに何かを通知して、外部から実行の流れを```強制的に変える```ための仕組みです。
...
一番多用されているのはなんといってもSIGINTでしょう。このシグナルはbashなどのシェルにおいて```Ctrl+C```と打つと送られるものです。
...
シグナルはbash以外からもkillコマンドによって送られます。
...
シグナルの一覧は```man 7 signal```コマンドを実行すれば見られます。
...
```プロセスは各シグナルについて、シグナルハンドラという処理をあらかじめ登録```しておけます。
# 出典
https://gihyo.jp/book/2022/978-4-297-13148-7

# シグナルの実験
```py
root@linuxstructure2:/home/vboxuser/study# cat intignore.py 
#!/usr/bin/python3
import signal
signal.signal(signal.SIGINT, signal.SIG_IGN)
while True:
    pass
```
# 出典
https://gihyo.jp/book/2022/978-4-297-13148-7

```
root@**********:**************# python3 intignore.py
^C^C^C^C^C^C^C^C^C^C^C^Z
[1]+  停止                  python3 intignore.py
root@**************:**************# python3 intignore.py &
[2] 3070
root@**************:**************# kill 3070 
```
# 気づき
確かに```Ctrl+C```を押しても終了できなかった。
しかし他の```Ctrl+Z```を押したら一時停止したからすごい
ソースコードの意味はまた後で