デーモンとは何ですか?


12

Ubuntuコンピューターで実行されているデーモンについて多くの話を聞きますが、それらは何ですか?

回答:


15

つまり、デーモンはバックグラウンドプロセスです。

デーモンは、バックグラウンドで実行される通常のプログラムだけでかまいませんが、ほとんどはプロセスを開始し、フォークして親を終了することで作成されます。

プロセスを分岐するとは、プロセスの正確なコピーを作成することを意味します。実際の親がすぐに終了する場合、そのプロセスの親はのinitプロセスになります/sbin/init。これは、すべてのUnixライクなオペレーティングシステムで最初に開始されるものです。現在、このプロセスはデーモンと呼ばれ、TTYが関連付けられていません。

Pythonのデーモンの例を次に示します。

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

厳密に言えば、まだ1つではありません。また、現在の作業ディレクトリを変更したり、標準入力とログファイルへの出力を制限したりする必要があります。このウィキペディアの記事詳細な内容を読むことができます。

この例を実行すると、コマンドラインで開始したプロセスが終了した場合でも、2秒後に印刷されます。このプロセスのコピーは、initによって「by」で実行されます。


8
これを拡張するために、WindowsからLinuxにアクセスする場合、デーモンはWindowsの「サービス」に相当する* nixと考えることができます。
ナスウィル

1
@ stefano-palazzo「... TTYが関連付けられていません」と言いましたが、「...気付くでしょう。2秒後に印刷されます...」。TTYをデタッチすると、ターミナルに書き込むことができなくなると思いました。
ホルヘブカラ

1
@JorgeBucaranはい。印刷は少しいたずらです。それはまだそれを開始したttyの標準出力ストリームへのハンドルを持つことができます。ファイル(/ dev / stdoutなど)を開くと、番号(ファイル記述子と呼ばれる)が得られます。ファイルを開いたプロセスがまだ実行されている限り、ファイルに書き込む必要があります(表示されます)で開いたファイル/proc/*/fd)。適切に動作するデーモンは、stdout、stderr、およびstdinへのハンドルを放棄することにより、ttyから完全に切り離されます。
ステファノパラッツォ

1
@StefanoPalazzoなるほど。親のプロセスstd / out / errへの参照を保持し、それから切り離すことができます。TTYへの参照を任意に保持できる場合、プロセスを切り離すとはどういう意味ですか?< superuser.com/questions/178587/… >は便利ですが、それでもはっきりしません。
ホルヘブカラ

1
@JorgeBucaranは、(たとえばdup2を使用して)プロセス自身のstdio を、作成した新しいもの(ログファイルなど)で上書きすることを意味します。完全な例です
ステファノ・パラッツォ

1

マルチタスクコンピューターオペレーティングシステムでは、デーモンは、対話型ユーザーの直接制御下ではなく、バックグラウンドプロセスとして実行されるコンピュータープログラムです。従来、デーモンのプロセス名は、プロセスが実際にデーモンであることを明確にするため、およびデーモンと通常のコンピュータープログラムを区別するために、文字dで終わります。たとえば、syslogdはシステムロギング機能を実装するデーモンであり、sshdは着信SSH接続を提供するデーモンです。

デーモンのレイヤーを見ることができるように


2
からの引用はどこですか?
ザンナ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.