- ベストアンサー
デーモンモードとは何でしょうか?
プログラムをデーモンモードで起動するとは、どういう意味なのでしょうか? プログラムは、UnixCで書かれております、ソースに何か手を加える必要があるので しょか。それから何らかのファイルに記述する必要があるのでしょか。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
もう少し具体的な説明をします。 ちょっと、表現をミスった点もありますので。 ・・・どうかボロが出ませんように(爆) ・デーモン(daemon)とは デーモンは、起動されるとシステムがシャットダウンするか、手動で止めるまで常に存在しつづけるプロセスの総称です。(若干の例外もありますが、概ねこうです) バックグラウンドで動作し、制御端末を持たないプロセスです。前回シェルと言ってしまったのはまずかったです。 制御端末の間違いです。 ps ax 等で見てみると、制御端末を示すカラム(TTとかTTY)が?マークになっています。 ちなみに、&は正確には、プロセスをバックグラウンドで処理するという事です。この時点で、制御端末から切り離したい場合、もう1クッション必要です。 ・デーモンを作るには 作りたいデーモンがどのような物であっても、デーモンとして動かす方法はさほど変わりないはずです。 よーするに、システムコールを使うわけですが・・・。 1.fork()して、制御端末を持たない子プロセスを生成する。 2.親プロセス(実際に実行されたプロセス)は、そのまま終了する。 3.setsid()で新しいセッションを生成する。 4.その後、必要に応じてchdir()で作業ディレクトリに移動し、もろもろの処理を行う。 5.エラー等は、syslog()でsyslogdに渡す方がいいかもしれません。 とまあ、こんな具合です。 実際のコーディング例は、世の中にいくらでもサンプルがありますので、探して見てください。 というか、私はシステム管理屋でバリバリのUNIXプログラマでは無いので、これ以上は無理です(爆) どちらかというと、シェルスクリプトをデーモンのように動かしたりする方が得意なもんで(笑) 指針程度には、お役に立てましたかね?
その他の回答 (3)
- onosuke
- ベストアンサー率67% (310/456)
sampleは、daemon.c というズバリな名前のものを各種ソースから探すとする見つかります。 探す際は、自分のプログラムと動作トリガーの似たものを探すと良いですね。 (タイマー型、ソケットリッスン型、割り込み待ち型など)
- you-m
- ベストアンサー率58% (190/327)
デーモンとして動くという事は、確かにバックグラウンドで動いている事が条件の一つになります。 もう一つ、起動したシェルから完全に切り離されている事が必要です。 実行時に、&を使ってバックグラウンド処理に切り替えても、これは必ずしもシェルから切り離されておらず、ログアウトすると、止まってしまう事もあります。 この辺り、OSやシェルの種類によって微妙に動きが違うみたいなんですが・・・。 正しくデーモンとして振舞うプログラムは、プログラムもそれなりの処理が必要です。 有名どころで例をあげれば、sendmailやApache等もそうです。 あまり詳細を説明せよと言われるとボロが出そうなので避けますが(爆) 起動時に自分自身の複製プロセスを作り、直接起動されたプロセスは、そのまま終了すると言った処理を行う事でシェルから完全に切り離され、デーモンとして動くようになるとか。 少しは参考になりましたか?
補足
OSは、Solalis8です。/etc/rc3.dにS99xxxという名前で登録し その中のシェルで プログラム名 & とやっているのですが、デーモンモードでは起動しません。 C言語でそのような書き方があるのでしょうか?
- acky
- ベストアンサー率31% (182/583)
バックグラウンドで動作させるということでしょうか?それなら多分次のように、最後に"&"をつけるってことじゃないですかね。 # /usr/sbin/hogehoge & 自信はありませんが。。。
お礼
daemon.cで検索し、いろいろな情報が得られました。 何とかなりそうです。有難うございました。