2016-11-22 4 views
3

Linux上でデーモンとして動作するJavaコンソールアプリケーションを作成したいのですが、アプリケーションとバックグラウンドデーモンとしてアプリケーションを実行するスクリプトを作成しました。アプリケーションが実行され、コマンドライン入力を待ちます。実行中のサービスまたはデーモンに入力を渡すことはできますか?

私の質問:

それが実行中のデーモンにコマンドライン入力を渡すことは可能ですか?

+0

申し訳ありませんが、タイトルが間違っています。 –

+0

申し訳ありませんが、タイトルが間違っています。アイデアは、nginxやtomcatのように動作するデーモンを作成することです。たとえば、ユーザーがコンソールに入力すると、デーモンが実行されます。「service MyserviceID --create test」とすると、daemondはこのコマンドを読みやすくするために役立つ必要があります。 daemonを再起動しないでこのすべて –

+0

サーバプロセス(デーモン)を書いているなら、いくつかのオプションがあります。 'socket'、' named pipes'や 'stdin'を使うこともできます。サーバプロセスやデーモンが誰かによって書かれていて、stdinからの読み込みが保証されている場合は、 '/ proc//fd/0'で入力を送ることができます。 – alvits

答えて

3

実行中のプロセスにはすべて、/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も参照してください。

関連する問題