タグ

daemonに関するsillowのブックマーク (12)

  • デーモンプロセスの起動について

    まず、デーモンとはいかなるものなのかという所が分かっていた方がいいでしょう。 かなり昔に、私が回答したものがありますので、参考にしてください。 http://okweb.jp/kotaeru.php3?q=230337 実際、PerlRubyであれば、きちんとしたデーモンプロセスを作成するのは、そう難しい話ではありません。 これがシェルスクリプトだとやや面倒になりますけどね。 &をつけて実行するやり方は、UNIX一般的には、単純にその端末上でのバックグラウンドになるだけで、デーモン化するわけではありません。環境にもよるかもしれませんが、基的にはログアウトした時に終了してしまいます。 ただし、Linuxの標準シェルであるbashの場合、&するだけで制御端末も切り離してしまうようです。この仕様はUNIX全般で通用しないものとして考える方がよいと思います。 以下は、UNIX全般のお約束として

    デーモンプロセスの起動について
  • デーモンプログラムの作成方法

    デーモンプログラム fork()、その後親プロセス終了。 プログラムを起動したシェルに制御が戻る。このfork()は新しいプロセスが プロセスグループリーダーにならないようにするため。 setsid()はプロセスグループリーダーだと失敗する。 setsid()によりプロセスグループとセッショングループのリーダーとなる。制御端末はセッションに関連づけらている。この新しいセッショ ンは制御端末を持たない。そのためこのプロセスは制御端末を持たない。 fork()して、親プロセス(セッショングループリーダー)は終了。デーモンが、セッショングループリーダーでないので、以後制御端末 を持つことがない。 chdir("/")。ファイルシステムを アンマウント出来ないことを避ける。 umask(0)として、書き出すあらゆるファイルのパーミッションを制御。 やらなくてもいいけど。 ファイルディスクリプタ0、

  • UNIXデーモンの作り方

    A Wealth of Information at Your Fingertips Store and Bookmark Documents Share Documents Privately Reach Millions of People

  • Unix Programming Frequently Asked Questions 日本語訳 - 1 プロセス制御 - 1.6 どうすればゾンビプロセスができることを防ぐことができますか?

    Go to the first, previous, next, last section, table of contents. 1 プロセス制御 1.1 新しいプロセスの生成: fork() 1.1.1 fork()は何をするのですか? #include <sys/types.h> #include <unistd.h> pid_t fork(void); fork()関数は存在しているプロセスから新しいプロセスを生成するために使用さ れます。新しいプロセスを子プロセスといい、すでに存在していたプロセスは親 プロセスといいます。fork()の戻り値をチェックすると、この両者を区別できま す。親プロセスには子プロセスのプロセスIDが返されますが、子プロセスには 0が返されるのです。 ですから、以下の簡単なコードがfork()の使い方の基になります。 pid_t pid; switch

  • Unix Programming Frequently Asked Questions 日本語訳 - Table of Contents

    このFAQについて 1 プロセス制御 1.1 新しいプロセスの生成: fork() 1.1.1 fork()は何をするのですか? 1.1.2 fork()とvfork()の違いは何ですか? 1.1.3 forkによる子プロセスを終了するときにexitよりも_exitを使うのはなぜですか? 1.2 環境変数 1.2.1 どうすればプログラム内で環境変数の値を取得・設定できますか? 1.2.2 どうすれば全ての環境変数を調べられますか? 1.3 どうすれば一秒未満のsleepができますか? 1.4 粒度の細かいalarm()はどうすれば得られますか? 1.5 どうすれば親プロセスと子プロセスの間で通信できますか? 1.6 どうすればゾンビプロセスができることを防ぐことができますか? 1.6.1 ゾンビプロセスってなんですか? 1.6.2 どうすればゾンビプロセスになることを防げますか? 1.7

  • 親プロセスは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の謎 - シリコンの谷のゾンビ
  • [c][unix]UNIXネットワークプログラミングのお勉強 (2) デーモンの作り方 - シリコンの谷のゾンビ

    一晩寝てからデーモンプロセスの作り方を眺めてとても簡単だということに気がついた.自分メモ. デーモンへの道のり fork()して子プロセス (次郎) を生成.親プロセス (太郎) を終了する 次郎プロセスでsetsid()する 次郎プロセスはセッショングループリーダになる この時点で次郎プロセスは制御端末を持たなくなる 次郎プロセスがfork()して孫プロセス (三郎) 生成.次郎プロセス終了 chdir("/")する. shutdown時のumount処理に迷惑をかけないため 標準入力,標準出力,標準エラー出力を閉じる サンプルコード 比較を行うために3つのプログラムを書いた. daemon 全部行う nondaemon 2度目のfork()をしない nondaemon2 setsid()しない #include <stdio.h> #include <stdlib.h> #includ

    [c][unix]UNIXネットワークプログラミングのお勉強 (2) デーモンの作り方 - シリコンの谷のゾンビ
  • デーモンプロセスの実像にせまる!デーモンプロセスのヒ・ミ・ツ

    一般にデーモンプロセスとは,一般的にはインタラクティブに処理を行わず, 時間やある一定のトリガーによって動作する常駐プロセスのことを指す. そもそもデーモン(daemon)注1とは,ギリシャ神話に登場する「神々と人間の間に介在する 二次的な神」や「守護神」のことで,コンピューターの中で,人知れず動作する 「縁の下の力持ち」の常駐プロセスには,ふさわしい愛称と言えるだろう. さて,デーモンプロセスは,一般的なコマンドとして動作するアプリケーションと比較 してもそれほど複雑ではない.しかし,作り方によっては守護神にも悪魔に もなってしまう可能性を秘めている. デーモンプロセスを「守護神」にするか「悪魔」にしてしまうかは, プログラムの作者が正しい知識を持っているかどうかにかかっているといっても 過言ではない. 注1 デーモンといえば demon も日語読みでは同じ発音になるが, demonの

  • NONBLOCK

    SIGCHLDの受信 #include <sys/types.h> /* ほかのsysヘッダより先にこのファイルをinlcudeする */ #include <sys/wait.h> /* waitpid()とマクロのヘッダ */ #include <signal.h> /* シグナル関数のヘッダ */ #include <stdio.h> /* fprintf()のヘッダ */ #include <unistd.h> /* fork()のヘッダ */ void sig_chld(int); /* SIGCHLDハンドラのプロトタイプ宣言 */ int main() { struct sigaction act; pid_t pid; /* sig_chldをSIGCHLDハンドラとする */ act.sa_handler = sig_chld; /* この例では、そのほかのシグナルはブ

  • PC覚え書き | プログラムのデーモン化

    VvZX(qvZX)Afork()VXeR[gpBVXeR[oAovZXmAvZXRs[B ovZXevZXARs[VvZXqvZXBevZXAqvZXfork()lpB evZXAfork()qvZXvZXIDpAqvZX0pBplAevZXqvZXッBlBAqvZXPvOヲB int main(void){ pid_t child // fork()li[ if( !(child=fork()) ){ // child=0qvZX printf("inchildprocess\n"); exit(0); } // evZXqvZXID\ヲ prinft("inparentprocess:childprocessID=%d\n,child); return 0; }

  • MSN Japan - ニュース, 天気, メール (Outlook, Hotmail), Bing検索, Skype

  • 僕たちが待ち望んでいたRubyスクリプトをデーモン化する方法 - http://rubikitch.com/に移転しました

    Rubyでは、簡単にデーモンが記述できる。その方法は簡単!Ruby 1.9だと Process.daemon と書くだけだ。その行の後は制御端末が切離され、デーモンとして実行される。Ctrl+Cで終了できないので、永遠に実行を続けるスクリプトは「pkill -f」などで殺す。 既存のスクリプトをデーモン化するには、この一行を加えればいいだけなのだが、常にデーモンにしてしまうとデバッグが困難になってしまう。そこで、テスト時はふつうに実行して、普段はデーモンにしてしまえばいい。その方法もまた簡単!上の一行を daemonize.rb というファイルに保存すればいい。だけどこれだけだとつまらないので、ついでにRuby 1.8にも対応させてみる。 if Process.respond_to? :daemon # Ruby 1.9 Process.daemon else # Ruby 1.8 req

    僕たちが待ち望んでいたRubyスクリプトをデーモン化する方法 - http://rubikitch.com/に移転しました
  • 1