タグ

processに関するsonotsのブックマーク (3)

  • 親プロセスは2度死ぬ - デーモン化に使うダブルforkの謎 - シリコンの谷のゾンビ

    デーモンプロセスを作る場合には,教科書によく書かれている2度forkは不要ではないか? ということを以前の記事に書いた. [c][unix]UNIXネットワークプログラミングのお勉強 (2) デーモンの作り方 - 睡眠不足?! 確かにBSDのdaemon(3) のコードでは,forkは1回しか呼んでいない. 「きっとプレセスがセッションリーダだと不都合があるのだろう.でもなぜ?」 というのがopen questionだった. それに対する答えを「詳解UNIXプログラミング」[1] に見つけた. SVR4においては,この時点でforkを再度呼び,親を終了することを勧める人がいる. 2番目の子がデーモンとして動作する.これは,デーモンはセッションリーダではなく, SVR4の規則 (9.6節) から,セッションリーダでなければ制御端末を取得できない,ということを保証する. あるいは,制御端末を取

    親プロセスは2度死ぬ - デーモン化に使うダブルforkの謎 - シリコンの谷のゾンビ
  • なるほどUnixプロセス読んだ - デーモン化のためのdouble fork - はこべにっき ♨

    なるほどUnixプロセス ― Rubyで学ぶUnixの基礎を読みました。UNIXプロセスの話、特に実用的なforkの利用方法についての話がコンパクトにまとまっていてわかりやすかったです。あまり詳細に踏みこんでいるという感じではないけど、とっかかりにこのにあるような知識があるのは良いと思いました。(シェルスクリプトから"foreman start"したときにCtrl-Cで終了できない現象の解説 - はこべブログ ♨ではまる前に読んでおいたら、もっとはやく問題解決できたと思います。) 第18章 デーモンプロセスに関係して二回目のforkについていろいろ調べたので、せっかくなのでメモを残しておきます。*1 第18章 デーモンプロセス では、プロセスをデーモン化するために必要な手順が丁寧に説明されています。その中で、プロセスを制御端末から切り離す手順として以下のようなコードが紹介されていました。

    なるほどUnixプロセス読んだ - デーモン化のためのdouble fork - はこべにっき ♨
  • 不完全なデーモンプロセスに制御端末を割り当てる方法を教えてください UNIX のデーモンプロセスについて勉強しています。…

    不完全なデーモンプロセスに制御端末を割り当てる方法を教えてください UNIX のデーモンプロセスについて勉強しています。デーモンプロセスを作るには、 1. fork する (子プロセスを作って親は死ぬ) 2. setsid する (子プロセスを制御端末から切り離す) 3. もう一度 fork する (セッションリーダーではない孫プロセスを作って子は死ぬ) という手順を踏むのだと、後述のブログ記事等で知りました (chdir, umask, STDIN/STDOUT/STDERR などの取り扱いは、今回は注目しないので省略します) この 3. でやっている二度目の fork が必要な根拠として、セッションリーダーであるデーモンプロセス (1. で fork した子プロセス) に制御端末を割り当てられてしまうとまずいためだ、という理由が挙げられています (シグナルを送られてプロセスを操られてし

  • 1