Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Programm als Daemon ausfuehren - wie rufe ich es auf..?
ich will eine Java Programm als Daemon unter Linux ausfuehren sobald das OS startet. Wie ich das mache, weiss ich.
Nun will ich aber mittels Shortcut (Ctrl+Shift+K) diesen Daemon aus seinem "Ruhezustand" reissen und was machen lassen. Ich weiss wie ich Shortcuts so einrichte, dass sie ein Programm starten. Wie kann ich aber durch einen Shortcut einen bereits laufenden Daemon beeinflussen?
Wie versetzt du deinen Daemon in den Ruhezustand? Hast du einen Signalhandler eingerichtet und wartest auf ein Signal?
Angenommen das ist so, dann wäre es wohl am einfachsten wenn du ein kleines Shell-Script schreibst und mittels Shortcut dieses Script aufrufst. Das Script führt dann nur den "kill" Befehl mit dem entsprechendem Signal aus.
Hmm. Ich habe mich schlecht ausgedrueckt und weiss auch gar nicht mehr ob ein Daemon Sinn macht.
Also das Szenario ist folgendermassen:
1. ein Java Programm wird gestartet und tut erstmal nichts.
2. im OS wird ein Shortcut eingerichtet (das hat jetzt nichts mit Java zu tun), der dieses in (1) wartende Programm anstossen soll etwas zu tun.
3. wird das in (1) wartende Programm "angestossen" etwas zu tun oeffnet ein Swing-Fenster und zeigt dem Nutzer eine Info an.
Ich hab das eigentlich alles so laufen. Ich weiss nur nicht, wie ich mit dem Shortcut das Java Programm "anstosse". Ich kann mit einem Shortcut ein beliebiges Java Programm starten. Aber ich weiss nicht wie ich ein bereits laufendes Java Programm "benachrichtige".
Eventuell wuerde es reichen wenn ich das Programm nochmal starte, dann aber das Programm merkt, dass schon eine Instanz laeuft und sich dann beendet und diese nutzt? Das ist leider aber auch viel Overhead. Am liebsten wuerde ich den Shortcut direkt die laufende Instanz anstossen lassen - deswegen dachte ich an sowas wie einen Daemon in meinem ersten Post.
Die wohl einfachste Möglichkeit dürfte sein, eine Pipe einzurichten (mkfifo). Dein Programm liest dann blockierend aus der Pipe, z. B. mittels BufferedReader die nächste Zeile. Bei einem Shortcut schreibst Du per Shellskript einfach eine Zeile in die Pipe.
Kannst Du ja mal testen:
Java:
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
System.out.println("Waiting");
try (BufferedReader r = new BufferedReader(new FileReader(new File("pipe")))) {
r.readLine();
}
System.out.println("Alive");
}
}
Dann im Terminal
Code:
javac Test.java
mkfifo pipe
java -cp . Test
und im anderen (gleiches Verzeichnis, versteht sich):