{"id":2601,"date":"2014-01-03T16:16:02","date_gmt":"2014-01-03T14:16:02","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2601"},"modified":"2014-01-03T16:16:02","modified_gmt":"2014-01-03T14:16:02","slug":"unterprozess-status-erfragen-und-das-ende-einleiten","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2014\/01\/unterprozess-status-erfragen-und-das-ende-einleiten\/","title":{"rendered":"Unterprozess-Status erfragen und das Ende einleiten"},"content":{"rendered":"<p>Mit Methoden von Process l\u00e4sst sich der Status des externen Programms erfragen und ver\u00e4ndern. Die Methode waitFor(\u2026) l\u00e4sst den eigenen Thread so lange warten, bis das externe Programm zu Ende ist, oder l\u00f6st eine InterruptedException aus, wenn das gestartete Programm unterbrochen wurde. Der R\u00fcckgabewert von waitFor() ist der R\u00fcckgabecode des externen Programms, eine zweite Variante von waitFor(\u2026) wartet eine gegebene Zeit. Wurde das Programm schon beendet, liefert auch exitValue() den R\u00fcckgabewert. Soll das externe Programm (vorzeitig) beendet werden, l\u00e4sst sich die Methode destroy() verwenden. <\/p>\n<p>abstract class java.lang.Process <\/p>\n<p>\u00a7 boolean isAlive()<br \/>Lebt der von der JVM gestartete Unterprozess noch? <\/p>\n<p>\u00a7 abstract int exitValue()<br \/>Wenn das externe Programm beendet wurde, liefert exitValue() die R\u00fcckgabe des gestarteten Programms. Ist die R\u00fcckgabe 0, deutet das auf ein normales Ende hin. L\u00e4uft das Programm noch, gibt es eine IllegalThreadStateException. <\/p>\n<p>\u00a7 abstract void destroy()<br \/>Beendet das externe Programm. <\/p>\n<p>\u00a7 Process destroyForcibly()<br \/>Im Moment wie destroy(), kann von Unterklassen anders implementiert werden. Seit Java 8. <\/p>\n<p>\u00a7 abstract void waitFor() throws InterruptedException<br \/>Wartet auf das Ende des externen Programms (ist es schon beendet, muss nicht gewartet werden), sonst blockiert die Methode, und liefert dann abschlie\u00dfend den exitValue(). <\/p>\n<p>\u00a7 boolean waitFor(long timeout, TimeUnit unit) throws InterruptedException<br \/>Wartet die angegebene Zeit auf das Ende des gestarteten Programms. Wurde das externe Programm schon beendet, kehrt die Methode sofort zur\u00fcck und liefert true; den Exit-Code liefert exitValue() weil hier, anders als bei waitFor() der R\u00fcckgabecode ein boolean ist. L\u00e4uft das Programm noch, und ist es nicht nach timeout Zeiteinheiten beendet, kehrt die Methode mit false zur\u00fcck. Die R\u00fcckgabe ist true, wenn das gestartete Programm in dem Zeitfenster beendet wurde. Hinweis: Die Methode bricht das externe Programm nicht ab, wenn nach \u00fcberschreiten der Zeit noch l\u00e4uft. Diese Logik muss ein Programmierer \u00fcbernehmen, und if ( ! waitFor(\u2026) ) mit destroy() kombinieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit Methoden von Process l\u00e4sst sich der Status des externen Programms erfragen und ver\u00e4ndern. Die Methode waitFor(\u2026) l\u00e4sst den eigenen Thread so lange warten, bis das externe Programm zu Ende ist, oder l\u00f6st eine InterruptedException aus, wenn das gestartete Programm unterbrochen wurde. Der R\u00fcckgabewert von waitFor() ist der R\u00fcckgabecode des externen Programms, eine zweite Variante [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11,66],"tags":[],"class_list":["post-2601","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-8"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2601"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2601\/revisions"}],"predecessor-version":[{"id":2602,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2601\/revisions\/2602"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}