2017-01-20 5 views
2

Mein Scala Skript wie folgt erstellt Subprozesse verhindern:Scala: Wie Subprozesse Empfang von STRG + C/Strg + C/SIGINT

val exitValue = Process(Seq("bash", "-c", command), dir) ! processLogger 

mit dem Befehl zum Beispiel sein "mvn clean package" oder zum Testen dieses Problems "sleep 20".

Aus irgendeinem Grund muss mein Skript SIGINT abfangen, weil der Benutzer gemeint haben könnte "kopieren" anstatt "stop it" (passiert wirklich von Zeit zu Zeit). I erreicht dies durch ein Signal-Handler wie folgt ergänzt:

Signal.handle(new Signal("INT"), this) 

override def handle(sig: Signal) 
{ 
    log.warn("Ignoring SIGINT (Ctrl+C). Press [Esc] instead.") 
} 

jedoch, wenn ein Subprozess läuft dies nicht funktioniert, weil STRG + C macht es zu stoppen. Was kann ich tun, damit der Subprozess SIGINT ignoriert? Ich habe eine Lösung für Python gefunden: Python: How to prevent subprocesses from receiving CTRL-C/Control-C/SIGINT Gibt es etwas ähnliches für Scala?

Antwort

1

Da Sie bash starten, können Sie den integrierten Befehl trap verwenden, um Signale in einem Subprozess zu ignorieren.

prepend Gerade trap '' SIGINT; (mit dem Semikolon) zum command:

Process(Seq("bash", "-c", "trap '' SIGINT;" + command)) 
+0

Vielen Dank! Ich dachte sogar daran, 'Python' zu nennen, um dies zu erreichen – mbee

Verwandte Themen