2016-11-22 4 views
3

Ich möchte eine Java-Konsole-Anwendung erstellen, die als Daemon unter Linux ausgeführt wird, ich habe die Anwendung und das Skript erstellt, um die Anwendung als Hintergrund-Daemon auszuführen. Die Anwendung wird ausgeführt und wartet auf die Eingabe der Befehlszeile.Ist es möglich, eine Eingabe an einen laufenden Dienst oder Daemon zu übergeben?

Meine Frage:

Ist es möglich, Kommandozeilen-Eingabe zu einem laufenden Daemon übergeben?

+0

Sorry, der Titel ist falsch. –

+0

Entschuldigung, der Titel ist falsch. Die Idee ist, einen Daemon zu erstellen, der wie nginx oder tomcat funktioniert. Wenn der Daemon beispielsweise ausgeführt wird, wenn ein Benutzertyp in die Konsole eingibt: "service MyserviceID - create test", muss der Daemond in der Lage sein, diesen Befehl zu lesen und zu handeln. All dies ohne Neustart des Daemonds –

+0

Wenn Sie den Server-Prozess (Daemon) schreiben, dann haben Sie mehrere Möglichkeiten. Sie können 'socket',' named pipes' oder sogar 'stdin' verwenden. Wenn der Serverprozess oder der Daemon von jemand anderem geschrieben wurde und garantiert, dass er von stdin liest, können Sie die Eingabe über '/ proc//fd/0' senden. – alvits

Antwort

3

Alle laufenden Prozesse haben ein spezielles Verzeichnis unter /proc mit Informationen und Haken in den Prozess. Jedes Unterverzeichnis von /proc ist die PID eines laufenden Prozesses. Wenn Sie also die PID eines bestimmten Prozesses kennen, können Sie Informationen darüber erhalten. Z.B .:

$ sleep 100 & ls /proc/$! 
... 
cmdline 
... 
cwd 
environ 
exe 
fd 
fdinfo 
... 
status 
... 

Bemerkenswert ist die fd Verzeichnis, das die mit dem Prozess verbunden sind alle file descriptors enthält. 0, 1 und 2 existieren für (fast?) Alle Prozesse und 0 ist die Standard-Standardeingabe. Also schreibt man an /proc/$PID/fd/0 schreibt an diesen Prozess 'stdin.

Eine robustere Alternative ist die Einrichtung eines named pipe, der an den Prozess Ihres Prozesses angeschlossen ist. Dann können Sie in diese Pipe schreiben und der Prozess wird sie lesen, ohne sich auf das /proc Dateisystem verlassen zu müssen.

Siehe auch Writing to stdin of background process auf ServerFault.

Verwandte Themen