Linux上でデーモンとして動作するJavaコンソールアプリケーションを作成したいのですが、アプリケーションとバックグラウンドデーモンとしてアプリケーションを実行するスクリプトを作成しました。アプリケーションが実行され、コマンドライン入力を待ちます。実行中のサービスまたはデーモンに入力を渡すことはできますか?
私の質問:
それが実行中のデーモンにコマンドライン入力を渡すことは可能ですか?
Linux上でデーモンとして動作するJavaコンソールアプリケーションを作成したいのですが、アプリケーションとバックグラウンドデーモンとしてアプリケーションを実行するスクリプトを作成しました。アプリケーションが実行され、コマンドライン入力を待ちます。実行中のサービスまたはデーモンに入力を渡すことはできますか?
私の質問:
それが実行中のデーモンにコマンドライン入力を渡すことは可能ですか?
実行中のプロセスにはすべて、/proc
の下に特別なディレクトリがあり、そのプロセスに情報とフックが含まれています。 /proc
の各サブディレクトリは、実行中のプロセスのPIDです。したがって、特定のプロセスのPIDを知っていれば、そのプロセスに関する情報を得ることができます。例えば:注目すべきは
$ sleep 100 & ls /proc/$!
...
cmdline
...
cwd
environ
exe
fd
fdinfo
...
status
...
は、プロセスに関連するすべてのfile descriptorsが含まれているfd
ディレクトリです。 0
,1
、および2
がすべてのプロセスに存在し、0
がデフォルトの標準入力です。したがって、/proc/$PID/fd/0
に書き込むと、そのプロセスのstdinに書き込まれます。
もっと堅牢な方法は、プロセスの標準に接続されたnamed pipeを設定することです。そのパイプに書き込むことができ、プロセスは/proc
ファイルシステムに頼ることなくそれを読み込みます。
また、ServerFaultのWriting to stdin of background processも参照してください。
申し訳ありませんが、タイトルが間違っています。 –
申し訳ありませんが、タイトルが間違っています。アイデアは、nginxやtomcatのように動作するデーモンを作成することです。たとえば、ユーザーがコンソールに入力すると、デーモンが実行されます。「service MyserviceID --create test」とすると、daemondはこのコマンドを読みやすくするために役立つ必要があります。 daemonを再起動しないでこのすべて –
サーバプロセス(デーモン)を書いているなら、いくつかのオプションがあります。 'socket'、' named pipes'や 'stdin'を使うこともできます。サーバプロセスやデーモンが誰かによって書かれていて、stdinからの読み込みが保証されている場合は、 '/ proc//fd/0'で入力を送ることができます。 –
alvits