[Java] [Linux] Untersuchen, wie die Implementierung von untergeordneten Java-Prozessen unter Linux realisiert wird

Normalerweise verwende ich nur C / C ++, aber ich hatte die Möglichkeit, mir beim Debuggen Sorgen über die geringere Implementierung der Java-Anwendung zu machen (Ich habe Java nicht berührt, es tut mir leid, wenn ich einen Fehler gemacht habe.)

Es scheint, dass "ProcessBuilder" verwendet wird, wenn ein externes Programm in Java ausgeführt wird. Zu diesem Zeitpunkt wird ein untergeordneter Prozess erstellt, und ich habe auf der Quellenebene überprüft, ob der untergeordnete Prozess dem untergeordneten Prozess unter Linux ähnlich ist.

Jemand untersuchte etwas Ähnliches, also zitierte ich auf halbem Weg.

java.lang.ProcessBuilder.start(…)  //Betriebssystem gemeinsam
 → java.lang.ProcessImpl.start(…) //Klasse für UNIX OS(Unter dem Solaris-Ordner)
  → java.lang.UnixProcess.<init> // UNIXProcess.java.linux
--------------------Native Code von hier(C Sprache) ---------------------
    → Java_java_lang_UNIXProcess_forkAndExec(...)
       (Vfork am Ende dieser Funktion()Ist fertig)

Zitat: Einblick in das ProcessBuilder-Apprentice-Programmiertagebuch

Wie oben wird schließlich der C-Code für jede Plattform aufgerufen. Informationen zur Plattformabstraktionsschicht von JDK einschließlich JNI von Coco et al. Siehe die folgenden Artikel. C-API, die die Plattform abstrahiert (Java) - Qiita

Bei OpenJDK8 lauten die spezifischen Quellen wie folgt. (Linux, aber der Pfad ist unter Solaris enthalten)

jdk8/jdk8/jdk: d94613ac03d8 src/solaris/native/java/lang/UNIXProcess_md.c

Ich wusste es zum Zeitpunkt des Namens Java_java_lang_UNIXProcess_forkAndExec, aber fork => exec. Genauer gesagt sieht es so aus, als ob vfork => execve unter Linux.

Zusammenfassend konnte ich bestätigen, dass das Erstellen eines untergeordneten Prozesses mit Javas "ProcessBuilder" eine Implementierung eines allgemeinen Linux-Prozesses ist.

Referenz

Einblick in das ProcessBuilder-Apprentice-Programmiertagebuch jdk8/jdk8/jdk: d94613ac03d8 src/solaris/native/java/lang/UNIXProcess_md.c C-API, die die Plattform abstrahiert (Java) - Qiita

Recommended Posts

[Java] [Linux] Untersuchen, wie die Implementierung von untergeordneten Java-Prozessen unter Linux realisiert wird
Ankündigung der Verfügbarkeit von Java 11 LTS unter Amazon Linux 2
Unter Linux ist der Zeitstempel einer Datei etwas vorbei.
Finden Sie heraus, wo sich die Java-Entität unter Linux befindet (diesmal CentOS).
Der Ursprung von Manjaro Linux ist "Mount Kirimanjaro"
Berechnen Sie die Speicherfreigaberate von Linux-Prozessen
Ändern Sie in Python das Verhalten der Methode je nach Aufruf
[2020Juli] Überprüfen Sie die UDID des iPad unter Linux
Wie stark ist dein Qiita? Statistiken über die Anzahl der in den Daten angezeigten Beiträge
Überprüfen Sie, ob das LAN-Kabel unter Linux nicht angeschlossen ist
Prozesse unter Linux dämonisieren
Stellen Sie die neueste Version von Python in Linux (Debian) von Chromebook
Sakura Die Geschichte, wie die Python-Flasche im Internet funktioniert hat
Wechseln Sie die Version, wenn mehrere Versionen von Java in Linux enthalten sind
Installieren Sie die neueste Version von Git auf Ihrem Linux-Server
Rufen Sie den Hostnamen des Host-PCs mit Docker unter Linux ab
Implementierung von MathJax auf Sphinx
Installieren Sie JDK unter Linux
Fügen Sie den Link unter Linux ein
Wie ist der Fortschritt? Lassen Sie uns mit dem Boom in Python weitermachen
Thread unter Linux anhalten (korrigierte Version am Ende des Artikels)
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
Wie einfach ist es, ein Medikament auf dem Markt zu synthetisieren?
Django: Variiert die Anzahl der untergeordneten Formulare in Abhängigkeit von der Anzahl der Eingabeelemente
[Linux] Deaktivieren der automatischen Aktualisierung der Datei /etc/resolv.conf (AmazonLinux2)
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
Was tun, wenn der Inode unter EC2 Linux erschöpft ist?
Verwendung von Jupyter am Frontend von Spacon ITO
Wie beurteilt die COTOHA API das Gefühl "der Mond ist schön"?
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Ich habe viel recherchiert, wie Python ausgeführt wird