Ist es möglich, einen “C-ähnlichen” Fork in Java mit einem neuen unabhängigen JVM-Prozess zu erstellen?
Wie?
Sakana
Ist es möglich, einen “C-ähnlichen” Fork in Java mit einem neuen unabhängigen JVM-Prozess zu erstellen?
Wie?
Benutzer525362
Diese Antwort kommt wahrscheinlich etwas spät, aber:
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
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
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