Advanced Linux Programmingを流し読み。次はChapter 3 - Processes。知ってるところは簡単に。知らなかったところは詳しめに。
- pidは16ビットで、pid_tという型がsys/types.hで定義されている
- 自分のpidはgetpid, 親のpidはgetppid
- 実行中のプロセスを見るにはps(1)
- kill(1)はSIGTERMを送る
- プロセスを起動する
- stdlib.hのsystem(3)は、シェルに文字列をそのまま渡すらしい
- fork(2):子プロセスが生成され、親プロセスでは子プロセスのpidが、子プロセスでは0が返り値
- exec(3):引数で指定したコマンドを実行するためにプロセス空間を塗り替える。execxxみたいなのがたくさんある
- niceで優先度を指定してコマンドを起動できる
- Signals
- /usr/include/bits/signum.hでシグナルが定義されている
- インクルードは
で - シグナルいろいろ
- シグナルハンドラの使い方とか
- sig_atomic_tというのがあるらしい
- abortは自分にSIGABRTを送る
- kill -KILL は SIGKILLを送る
- ためしにkill(child_pid, SIGKILL)やってごらん
- シグナルを使うにしても、mainの返り値は0にしとくと&&とか||を使ってコマンドをつなげるときにいろいろ便利かも
- $?でmainの返り値
- wait(2)でプロセスの終了を待つ
- zombie processについて
- child processをcleanupするのは親プロセスの責任
- sigaction (SIGCHLD, &sigchld_action, NULL);