2017-08-30 3 views
1

Ich möchte einige Jars in Linux von Java-Laufzeitumgebung starten. in der Befehlszeile von Linux wäre es etwa so aussehen:Wie starten Sie mehrere Gläser mit Linux-Bildschirmen?

> screen -S jar1 
> java -jar Something1.jar 
> Ctrl + AD 
> screen -S jar2 
... 

, wie ich das mit Java tun kann?

+1

Sie können nicht. Sie können jedoch die Befehlszeilenoptionen von 'screen' betrachten, um die Funktionalität der '^ AD'-Verknüpfung zu erreichen ... –

+0

können Sie die Roboter-API verwenden, um eine Tastenkombination zu senden. Schauen Sie [hier] (https://stackoverflow.com/questions/14595483/using-java-to-send-key-combinations) zum Beispiel. – ArcticLord

Antwort

0

Um einen Bildschirm mit einem eigenen Sitzung & Befehl zu starten, direkt freistehend, können Sie dies tun:

screen -dmS jar1 bash -c "java -jar jar1.jar" 

, die von der Kommandozeile ist, wo screen einen neuen Prozess Gabel, die so im Hintergrund ausführt, nachdem Wenn Sie das oben genannte ausführen, sind Sie wieder in Ihrer interaktiven Shell. Aber von einem anderen Programm würden Sie -D anstelle von -d verwenden, zum Beispiel mit Java möchten Sie wahrscheinlich die Fähigkeit waitFor() auf dem Prozess, den Sie starten.
Von man screen:

-d -m Startbildschirm in "losgelöst" -Modus. Dies erstellt eine neue Sitzung, hängt jedoch nicht daran. Dies ist nützlich für Skripts zum Systemstart.
-D -m Dies startet auch Bildschirm im "gelösten" Modus, aber nicht einen neuen Prozess. Der Befehl wird beendet, wenn die Sitzung beendet wird.

Beispiel mit 2 Dummy lang laufende Befehle:

% screen -dmS app-top top 

% screen -dmS app-foo bash -c "while sleep 1; do date; done" 

% screen -ls 
There are screens on: 
     25377.app-foo (08/30/2017 09:26:24 AM)  (Detached) 
     24977.app-top (08/30/2017 09:23:41 AM)  (Detached) 

Baum von Prozessen:

SCREEN -dmS app-foo bash -c while sleep 1; do date; done 
\_ bash -c while sleep 1; do date; done 
    \_ sleep 1 
SCREEN -dmS app-top top 
\_ top 

So von Java, etwa wie folgt:

private Process runInScreen(String sessionName, String command) throws IOException { 
    return new ProcessBuilder("screen", "-DmS", sessionName, "bash", "-c", command).inheritIO().start(); 
} 
+0

Danke Mann! Sehr hilfreich. –

Verwandte Themen