読者です 読者をやめる 読者になる 読者になる

なるほどUnixプロセス読書記録(1)

読みます。

tatsu-zine.com

 

すでに読んだことあって2周目なんだけど、前回はSpyglass(本書に含めることを目的に設計されたWebサーバ)についてはすっとばしていたので、今度はそこもふくめてもう一度手を動かしながら読んでみます(タイトルに(1)とつけてしまってよかったか迷っている)(続くかな)

 

今日は6章まで読み、以下を理解した。

  • RubyのProcess.pidはgetpid(2)に対応している。
  • RubyのProcess.ppidはgetppid(2)に対応している。
  • Rubyでは、プロセスの現在のpidはグローバル変数$$にも保持されている。
  • lsofはオープン中のファイルやそのファイルをオープンしているプロセスのリストを出力するコマンド。
  • Rubyでは開いたリソースはIOクラスで表現され、IO#filenoでファイルディスクリプタ番号を取得できる。
  • すべてのUnixプロセスには標準入力、標準出力、標準エラー出力という3つの開かれたリソースがついてくる。
  • カーネルによって1プロセスごとにリソースの制限が設定されており、RubyではProcess.getrlimit(:NOFILE)でファイルディスクリプタの最大数を調べることができる。
  • Process.getrlimitはgetrlimit(2)に対応している。
  • ファイルディスクリプタの最大数はソフトリミットとハードリミットがある。
  • ソフトリミットは変更でき、RubyではProcess.setrlimit(:NOFILE, 4096)などとして変更できる。
  • Process.setrlimitはsetrlimit(2)に対応している。
  • ソフトリミットを超えた場合にはRubyではErrono::EMFILE例外が送出される。
  • ハードリミットは無限大と表され、Rubyでは定数Process::RLIM_INFINITYでその値を確認できる。
  • Process.getrlimit/setrlmitではその他のシステムリソースの制限の確認/変更ができる。

   module Process (Ruby 2.3.0)