ravelll の日記

よしなに

なるほどUnixプロセス Rubyで学ぶUnixの基礎 を読んだ

新人エンジニアとの読書会でシグナルの話が出た時に色々知識が曖昧なことに気づいたので読んだ。(Spyglass についてはまだ触っていない)

社内の別の読書会にこれの原著を読むものがあったんだけど、 当時 RubyUNIX について知識がなさ過ぎたり英語読むのに少しつらみがあったり そもそも途中から参加していなかった。覚えていたのはゾンビプロセスの語感と内容が重要そうだったってことくらい。

今回は英語学習より内容の速習を求めたので、翻訳版を読むことにした。 以下は読書感想文です。

プロセス、カーネルシステムコール

この本はプロセスとそれを取り巻く技術についてそれぞれかなり基礎的なことから書かれており、UNIX について然程知識がなくとも問題なく理解し読み進められる。
自身ではプロセスは親子関係やPIDについて知っている程度で、5章のファイルディスクリプタや 10章の終了コード、11章の fork の仕組み等々はほとんど知らなかった。
カーネルシステムコール、その他 UNIX プログラミング的な話については更に知らなかった。

その中で、決して浅すぎない内容を苦なく読み進められたのは、 慣れ親しんでいる言語によるサンプルコードとわかりやすい説明があったからこそと思う。
Ruby のコードも多くは簡易なサンプルなので、 Ruby 自体は多少触ったことあるけど社会に出て初めて Rails ベースのサービスに携わる、 という人*1にはうってつけの本だろう。
それを就業2年目にしてああためになったと読んでいることについての議論は本筋でないので割愛したい。

fork と Unicorn

業務で Ruby を書く人で Unicorn を使っている人は少なくないと思う。
自身も業務でお世話になっていつつも、その構造について具体的なイメージは全く持てずにいた。

この本には Unicorn の動作の理解に直結する技術について、プロセスを fork するとはなんぞや、なレベルから理解することができる。
具体的な技術については、10章の終了コードの話、16章のシグナルの話、18章のデーモンプロセスの生成過程、19章の端末プロセスの話にある Graceful Restart における利用例、付録2 のワーカープロセスの振る舞いについてなどがある。
特に付録のワーカープロセスについては、Unicorn に着目した章として実際のコードを追いつつの濃い説明があり捗る。

プロセス間通信

研修での課題に nginx と unicornUNIX ドメインソケットで通信するよう設定するものがあった。
当時は調べつつ設定はできたがその通信方法が何たるかは分からず、やはり未だに分からずにいた。

17章では、UNIX ソケットを含むプロセス間通信の基礎について知ることができる。
ネット上で通信の話を調べると大抵は深い構造まで話すことを前提とした導入になっていて理解が難しい。
そういった全体像への説明に立ち向かうための下地を作るにとてもよい内容だった。

まとめ

パワーある新卒だけをエンジニアに取っている企業でなければ、研修中に読ませるに良い本ではないでしょうか。

--

reference

*1: つまり弊社の新卒だ!