LoginSignup
0
0

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

Posted at

子プロセスのゾンビ化

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

出典

シグナル

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

出典

シグナルの実験

root@linuxstructure2:/home/vboxuser/study# cat intignore.py 
#!/usr/bin/python3
import signal
signal.signal(signal.SIGINT, signal.SIG_IGN)
while True:
    pass

出典

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を押したら一時停止したからすごい
ソースコードの意味はまた後で

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0