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

bekkou68の日記

開発しているサービス, IT技術, 英語など。

Unix

『Working with Unix Processes』の Appendix: How Unicorn Reaps Worker Processes を読みました

はじめに How Resque Manages Processes の続きです。 主旨 Unicorn が親プロセスを終了する際に、どうやって親なし子プロセスができないように制御しているかを読み解く。 コードリーディング大会 勉強会メンバーでコードを読んでみました。読んだコードは…

『Working with Unix Processes』の Appendix: How Resque Manages Processes を読みました

はじめに Ending の続きです。 まとめ なぜ Resque が job を実行するのに fork しているのかというと、ワーカーのプロセスが使うメモリ量の肥大化を防ぐためだ。job を実行する度に fork するのでメモリは使うデメリットはあるが、実行後のクリーンアップが…

『Working with Unix Processes』の Ending を読みました

はじめに Spawning Terminal Processes の続きです。 まとめ キーワードは「抽象化」と「コミュニケーション」。 「抽象化」…沢山のプログラミング言語があるが、カーネルから見れば全て同じもの。数字のアイデンティファイアがついて、カーネルのリソースに…

『Working with Unix Processes』の Spawning Terminal Processes を読みました

はじめに 『Daemon Processes』の続きです。 勉強会でのまとめ 本文の自分の理解のまとめ、本文の知識をもって試したこと、議論したこと、自分の理解のための補足などを書きます。 イントロダクション Rubyプログラムからシェルのコマンドを実行する方法には…

『Working with Unix Processes』の Daemon Processes を読みました

はじめに Processes Can Communicate の続きです。 主旨 デーモン化の仕組みを知るために Rack の rakupコマンドの実装を読みます。 コードリーディング大会 デーモン化の処理を理解するため、コードリーディングや勉強会メンバーとディスカッションを行いま…

『Working with Unix Processes』の Processes Can Communicate を読みました

はじめに Processes Can Get Signals の続きです。だいぶ終盤になってきました。 まとめ プロセス間コミュニケーション(IPC)の一般的な方法はパイプとソケットがある。パイプは単方向。パイプはファイルディスクリプタをもつリソースなので子プロセス間で…

『Working with Unix Processes』の Processes Can Get Signals を読みました

はじめに Zombie Processes の続きです。 この本は社内勉強会で読み進めているのですが、今回から進め方を少し変えました。今までは本文を逐次翻訳で読み進めていました。それだと勉強会の期間が長引きそうなので、今回からは予習を前提にしました。メンバー…

『Working with Unix Processes』の Zombie Processes を読みました

はじめに Processes Can Wait の続きです。 まとめ 子プロセスが終了した後に親プロセスで wait するとその子プロセスの情報を得ることができる。なぜそれが可能になるのかというと、カーネルが終了した子プロセスの情報をキューイングして保持してくれるか…

『Working with Unix Processes』の Processes Can Wait を読みました

はじめに Processes Are Friendly の続きです。 まとめ プロセスは wait できる。Ruby の Process.wait は「親プロセスのもつ子プロセスのいずれか一つが exit するまで親プロセスを待たせるブロッキングコール」である。Process.wait の戻り値は exit した…

『Working with Unix Processes』の Processes Are Friendly を読みました

はじめに Orphaned Processes の続きです。 大事なことのまとめ Copy-on-Write(以下 CoW)についての説明(Processes Can Fork を読んだときの感想でふれた)。 MRI や Rubinius は CoW をサポートしていない。CoW をサポートするには CoWフレンドリーにな…

『Working with Unix Processes』の Orphaned Processes を読みました

はじめに Processes Can Fork の続きです。 メモ 子プロセスがからむとターミナルから制御するのは難しい。ターミナル上でつくった親プロセスの実行が終わったあとでも子プロセスは残り続ける。親をなくしたプロセスを制御する方法は 2つで、それらはデーモ…

『Working with Unix Processes』の Processes Can Fork を読みました

はじめに Processes Have Exit Codes の続きです。 メモ プロセスはフォークできる。フォークしてつくられた子プロセスは親プロセスの正確なコピーである。したがって500MBのサイズのプロセスをフォークしてできるプロセスのサイズも500MBである。また、親プ…

『Working with Unix Processes』の Processes Have Exit Codes を読みました

はじめに Processes Have Names の続きです。 メモ すべてのプロセスはエクジットコードを持っている。慣習的に 0 は成功でその他は失敗を示す。 Ruby でプログラムを終了する方法はいくつかある。 exit: code=0。at_exitブロックは実行される exit!: code=1…

『Working with Unix Processes』の Processes Have Names を読みました

はじめに Processes Have Arguments の続きです。 メモ プロセス間で連携するときに使える情報は2つあり、それらはプロセス名とエクジットコード。プロセス名はだぶることもある。プロセス名は Resque で活用されている。 やってみた: プロセス名が変えられ…

『Working with Unix Processes』の Processes Have Arguments を読みました

はじめに Processes Have an Environment の続きです。 メモ すべてのプロセスは引数の配列を持っている。Ruby では ARGV に保持されている。引数がよく使われるケースは ファイル名を受け取ってファイルを操作 コマンドラインの入力をパースする(例: Ruby …

『Working with Unix Processes』の Processes Have an Environment を読みました

はじめに Processes Have Resource Limits の続きです。 メモ すべてのプロセスは親から環境変数を引き継ぐ。環境変数のライフサイクルは各プロセスにあり、それぞれのプロセスでグローバル。bash と ruby といったように、異なる言語で動いているプロセス間…

『Working with Unix Processes』の Processes Have Resource Limits を読みました

はじめに Processes Have File Descripters を読みました の続きです。 メモ ファイルディスクリプターには 2種類リミット、ソフトリミットとハードリミットがある。ソフトリミットは物理的なリミットではない。Ruby ではリミットをこえると例外が起きる。ソ…

『Working with Unix Processes』の Processes Have File Descripters を読みました

はじめに Processes Have Parents を社内勉強会で読みました の続きです。 メモ Unix の思想の一つは「すべてがファイルである」。テキストファイルもデバイスもソケットもファイル。ファイルディスクリプタはOSがファイルを識別するための識別子である。な…

『Working with Unix Processes』の Processes Have Parents を読みました

はじめに 『Process Have IDs』 に引き続き読みました。 大事なこと すべてのプロセスは親プロセスを持っている。たとえば zsh上で irb を実行した場合、zsh が irb の親プロセスとなる。このことは irb上の Process.ppid を ps -p することで確認できる。デ…

『Working with Unix Processes』の Process Have IDs を読みました

はじめに 『Working with Unix Processes』を社内勉強会で読んでます。 引き続きメモです。 メモ プロセスには ID がシーケンシャルにふられて Kernel がそれを管理する。ID というシンプルなものだからこそプログラムで扱いやすいものになっている。Ruby で…

『Working with Unix Processes』の Primer を読みました

はじめに Introdcution に引き続き『Working with Unix Processes』の Primer を社内勉強会で読んだときのメモを書きます。本の内容の要約や本を読んで実際に試してみたことなどが混ざってます。 メモ manpage には次のようなセクションがある。1: コマンド,…

『Working with Unix Processes』の Introduction を読みました

はじめに The Pragmatic Bookshelf から購入しました。いま社内勉強会で読み進めています。プロセスまわりがサッパリなのでこれを機に理解を深められたらなと思います。書いたコードがなぜ動くのかを知りたくてワクワクしてます。 大事だと思ったことや登場…