Java – C-ähnlicher Fork?

Lesezeit: 2 Minuten

Benutzeravatar von Sakana
Sakana

Ist es möglich, einen “C-ähnlichen” Fork in Java mit einem neuen unabhängigen JVM-Prozess zu erstellen?

Wie?

  • Vielleicht könntest du genauer darauf eingehen, was du zu erreichen versuchst? Wie bereits erwähnt, können Sie einen anderen Prozess ausführen, der eine andere Instanz der JVM sein könnte, aber das gibt Ihnen nicht die gleiche Zustandsfreigabe wie fork() in C. Andererseits können Sie Threads ausführen, aber dort erhalten Sie mehr gemeinsame Nutzung als bei fork().

    – Markus Bessey

    13. November 2008 um 17:56 Uhr

  • Ich möchte einfach das Teilen vermeiden, das dieser Thread impliziert. Danke für deine Sorge 🙂

    – sakana

    14. November 2008 um 13:42 Uhr

Benutzeravatar von user525362
Benutzer525362

Diese Antwort kommt wahrscheinlich etwas spät, aber:

http://akuma.kohsuke.org/

scheint genau das zu sein, was du suchst

  • Es scheint, dass es nicht wirklich forkt, sondern die neuen untergeordneten Prozesse von exec auf eine Weise, die einige Vorteile wie Fork bietet.

    – Rogerpack

    23. Dezember 2011 um 0:07 Uhr

  • Beachten Sie, dass es nur auf POSIX-ähnlichen Systemen funktioniert (also ungefähr alles außer Windows).

    – KarlB

    18. Januar 2012 um 15:41 Uhr

  • Sie können den Quellcode von Akuma lesen und die Posix-API mit JNA verwenden, wie es Akuma tut.

    – Arnaud

    15. Februar 2017 um 14:54 Uhr

  • Während dies die Frage theoretisch beantworten kann, wäre es vorzuziehen, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.

    – Ferrybig

    2. Juli 2017 um 10:03 Uhr

Benutzeravatar von PhiLho
Philho

Lustigerweise arbeite ich gerade daran: ein Java-Prozess, der andere Java-Prozesse ausführt. Ich habe den Artikel verwendet Von Runtime.exec() zu ProcessBuilder als solide Basis und Wenn Runtime.exec() dies nicht tut als guter Rat, wie man die Ausgabeströme verschlingt.

PS.: Für diejenigen, die sich fragen, ich musste das tun (anstatt neue Threads zu erzeugen), weil ein weiterer Java-Prozess das Vorhandensein dieser Prozesse überprüft, die normalerweise separat mit Shell-Befehlen ausgeführt werden.

  • Diese beziehen sich nur auf Runtime.exec()was VIEL anders ist als in der Lage zu sein, das Kind nach a explizit zu kontrollieren fork().

    – Volker Stolz

    9. Oktober 2012 um 7:51 Uhr

  • Können Sie bitte die Antwort aktualisieren und den Link für ProcessBuilder reparieren?

    – Jatin Kumar

    18. Juni 2015 um 6:18 Uhr

  • Link ist tot 🙁

    – Rahul Sharma

    10. Mai 2018 um 10:13 Uhr

  • Dies ist eine alte Antwort, aber wenn Sie die Informationen trotzdem erhalten möchten, verwenden Sie die Wayback-Maschine, um auf diese alten Artikel zuzugreifen. Oder nach neueren suchen?

    – Philho

    11. Mai 2018 um 10:23 Uhr

Das Anwendungsisolations-API (JSR 121) stellt vor Isolate die diesen Anwendungsfall adressiert.

  • Soweit ich sehen kann, wird die Isolations-API unter dem aktuellen (1.8) JDK nicht unterstützt. Es gibt ein experimentelles MVM-Projekt (Multitasking Virtual Machine), das dies tut, aber es hat seinen Weg nicht in die Mainline gefunden. Außerdem scheint mir, dass die Isolations-API keine Verzweigung zulässt, bei der der Zustand des Verzweigungsprozesses in das Kind geklont wird: Soweit ich verstehen konnte, beginnt die Isolierung mit einer Hauptmethode und (natürlich ) verschiedene Isolate teilen keinen Zustand.

    – Pietro Braione

    15. Oktober 2014 um 12:23 Uhr

1411330cookie-checkJava – C-ähnlicher Fork?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy