Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Working With Unix Processes を(途中まで) 読んだよ  Katsuji Ishikawa <katsuji.ishikawa@gmail.com>
menu• Working With Unix Processes てなに• 各チャプターまとめ
Working With Unix    Processes てなに•   http://workingwithunixprocesses.com/    •   What a file descriptor is and how it work...
各チャプターまとめ
その前に• irb [Enter] したターミナル• ひまなターミナルをいくつか• 「アクティビティモニタ」も起動!
Processes Have IDs•   プロセスは ID をもつよ•   全てのプロセスは”ユニークなプロセス識別子” -- pid    をもつよ•   ただ単に数値でしかないよ•   puts Process.pid してみよう!•  ...
Processes Have Parents•   プロセスは親をもつよ•   全てのプロセスは親プロセスをもつよ•   その親プロセスは 親プロセス識別子 - ppid として知られてるよ•   Mac OS X での例: ターミナルを起動,...
Processes Have FIle       Descriptors•   プロセスはファイルディスクリプタをもつよ•   すべてはファイル - *NIX の哲学のひとつとして、すべてはファイ    ルだよ•   デバイスはファイルとして...
Processes Have FIle     Descriptors(cont.)•   プロセス終了すると閉じるよ•   Ruby だと IO クラスだよ•   passwd = File.open(/etc/passwd)•   puts...
Processes Have FIle    Descriptors(cont.)•   閉じたファイルが使ってたファイルディスクリ    プタを読んでみよう!•   標準入出力 (STDIN, STDOUT, STDERR)•   ls -l...
Processes Have FIle    Descriptors(cont.)•   ファイルディスクリプタはソケットやパイプな    ど、ネットワークプログラミングのコアなとこで    使われるよ。あといろんなファイルの操作でも•   R...
Processes Have          Resource Limits•   プロセスはリソースリミットをもってるよ•   リミットを確認してみよう!    •   p Process.getrlimit(:NOFILE)    •  ...
Processes Have    Resource Limits• 限界をこえると Errno:EMFILE が発生す るよ• ほかのリソース: nproc, fsize, stack とかあ るよ
Processes Have    Resource Limits• 多くのプログラムでは変更は必要ない よ。数千のネットワーク接続が必要な ときなどは変更するよ• システムコール: Process.getrlimit は getrlimit(...
Processse Have an      Enrivonment• プロセスは環境(変数)をもつよ• システムコール: setenv(3), getenv(3),  environ(7)
Processes Have      Arguments• プロセスは引数をもつよ• はいれつ!• argv.py, argv.rb
Processes Have Names• プロセスは名前をもつよ• irb のセッションは irb という名前• python で変えようとしたらわからなく て泣きそうだったよ
Processes Have Exit          Codes•   プロセスは終了コードをもつよ•   0-255 のどれかだよ、0 は正常終了だよ•   どのように終了する?    •   exit => 0 だよ    •   ex...
Processes Can Fork•   プロセスはフォークできるよ•   「fork(2) を使え、ルーク」だよ•   fork(2) で新しいプロセス作れるよ•   新しいプロセスは元のプロセスのコピーだよ•   子プロセスは親プロセスの...
Processes Can Fork•   マルチコアプログラミング?•   保証しないけどマルチコアで分散するよ•   500MB つかってるプロセスが fork(2) => 1GB つかうよ•   10回 fork(2) でもするとさくっと...
Orphaned Processes•   みなしごプロセス•   プロセスを ctrl-c でとめると全部とまる?親だけ?•   親だけだよ•   親が死ぬと子にはなにがおきる? なにも。•   みなしごは PID 1 のプロセスが親になるよ...
Working With Unix Processes を(途中まで) 読んだよ.
Upcoming SlideShare
Loading in …5
×

Working With Unix Processes を(途中まで) 読んだよ.

652 views

Published on

Working With Unix Processes を(途中まで) 読んだ。 社内自グループでの勉強会で使用。

Published in: Technology
  • Be the first to comment

Working With Unix Processes を(途中まで) 読んだよ.

  1. 1. Working With Unix Processes を(途中まで) 読んだよ Katsuji Ishikawa <katsuji.ishikawa@gmail.com>
  2. 2. menu• Working With Unix Processes てなに• 各チャプターまとめ
  3. 3. Working With Unix Processes てなに• http://workingwithunixprocesses.com/ • What a file descriptor is and how it works. • When you need a daemon process, and when you dont. • Creating new processes with fork(2). • 4 different ways to exit a process. • The real world concerns of spawning shell commands and how to avoid them. • High level discussion about the costs and pitfalls of creating processes. • Defining signal handlers that dont steal from other developers. • Internals of Resque and Unicorn and how they use this stuff. • Lots more! Its 130 pages packed with guidelines, sample code, and best practices.
  4. 4. 各チャプターまとめ
  5. 5. その前に• irb [Enter] したターミナル• ひまなターミナルをいくつか• 「アクティビティモニタ」も起動!
  6. 6. Processes Have IDs• プロセスは ID をもつよ• 全てのプロセスは”ユニークなプロセス識別子” -- pid をもつよ• ただ単に数値でしかないよ• puts Process.pid してみよう!• ログファイルでよくみるかも• システムコール: Process.pid は getpid(2)
  7. 7. Processes Have Parents• プロセスは親をもつよ• 全てのプロセスは親プロセスをもつよ• その親プロセスは 親プロセス識別子 - ppid として知られてるよ• Mac OS X での例: ターミナルを起動, bash プロンプトに入る=> bash の親がターミナル• puts Process.ppid してみよう!• ps -p <ppid-of-irb-process> してみよう!• システムコール:Process.ppid は getppid(2)
  8. 8. Processes Have FIle Descriptors• プロセスはファイルディスクリプタをもつよ• すべてはファイル - *NIX の哲学のひとつとして、すべてはファイ ルだよ• デバイスはファイルとして扱い、ソケットとパイプもファイルとして 扱い、ファイルもファイルとして扱うよ• ディスクリプタはリソースを表すよ• プロセスがファイルを開くと、ファイルディスクリプタ(数) が割り当 てられるよ• ファイルディスクリプタはかんけーのないプロセスとは共有しないよ
  9. 9. Processes Have FIle Descriptors(cont.)• プロセス終了すると閉じるよ• Ruby だと IO クラスだよ• passwd = File.open(/etc/passwd)• puts passwd.fileno• 複数のファイルを開くとどうなる?• 1. ファイルディスクリプタは使われてない最小値がつかわれる• 2. 閉じるとそのファイルディスクリプタはまたつかえるように なる
  10. 10. Processes Have FIle Descriptors(cont.)• 閉じたファイルが使ってたファイルディスクリ プタを読んでみよう!• 標準入出力 (STDIN, STDOUT, STDERR)• ls -l /dev/std*• puts STDIN.fileno• puts STDOUT.fileno• puts STDERR.fileno
  11. 11. Processes Have FIle Descriptors(cont.)• ファイルディスクリプタはソケットやパイプな ど、ネットワークプログラミングのコアなとこで 使われるよ。あといろんなファイルの操作でも• Ruby の IOクラスの多くのメソッドはシステムコ ールと同じ名前にマップしてるよ• open(2), close(2), read(2), write(2), pipe(2), fsync(2), stat(2)...
  12. 12. Processes Have Resource Limits• プロセスはリソースリミットをもってるよ• リミットを確認してみよう! • p Process.getrlimit(:NOFILE) • [256, 9223372036854775807]• 左: ソフトリミット, 右: ハードリミットだよ• ソフトリミット: ほんとのリミットじゃないよ。増やせるよ。• ハードリミット: ふつーは root だけが変更できるよ。• ソフトリミットを増やしてみよう!
  13. 13. Processes Have Resource Limits• 限界をこえると Errno:EMFILE が発生す るよ• ほかのリソース: nproc, fsize, stack とかあ るよ
  14. 14. Processes Have Resource Limits• 多くのプログラムでは変更は必要ない よ。数千のネットワーク接続が必要な ときなどは変更するよ• システムコール: Process.getrlimit は getrlimit(2)、Process.setrlimit は setrlimit(2) だよ
  15. 15. Processse Have an Enrivonment• プロセスは環境(変数)をもつよ• システムコール: setenv(3), getenv(3), environ(7)
  16. 16. Processes Have Arguments• プロセスは引数をもつよ• はいれつ!• argv.py, argv.rb
  17. 17. Processes Have Names• プロセスは名前をもつよ• irb のセッションは irb という名前• python で変えようとしたらわからなく て泣きそうだったよ
  18. 18. Processes Have Exit Codes• プロセスは終了コードをもつよ• 0-255 のどれかだよ、0 は正常終了だよ• どのように終了する? • exit => 0 だよ • exit 22 => 22 とゆー終了コードで終了するよ • at_exit を使うとそのブロックを呼び出して終了するよ • exit! => 1 だよ、at_exit のブロックはよびださないよ • abort => 1だよ、at_exit 呼び出すよ • raise は 例外を起こすよ
  19. 19. Processes Can Fork• プロセスはフォークできるよ• 「fork(2) を使え、ルーク」だよ• fork(2) で新しいプロセス作れるよ• 新しいプロセスは元のプロセスのコピーだよ• 子プロセスは親プロセスのメモリ全てのコピーを継承するよ• 親プロセスのファイルディスクリプタもだよ• fork してみよう!
  20. 20. Processes Can Fork• マルチコアプログラミング?• 保証しないけどマルチコアで分散するよ• 500MB つかってるプロセスが fork(2) => 1GB つかうよ• 10回 fork(2) でもするとさくっとメモリを食いつぶすよ • copy-on-write の話はこのあとの(まだよんでない)チャ プターにあるはずだよ• fork bomb と呼ばれるよ• Ruby の Kernel#fork は fork(2) にマップされてるよ
  21. 21. Orphaned Processes• みなしごプロセス• プロセスを ctrl-c でとめると全部とまる?親だけ?• 親だけだよ• 親が死ぬと子にはなにがおきる? なにも。• みなしごは PID 1 のプロセスが親になるよ• みてみよう!

×