[Java] [Linux] Etude de la manière dont l'implémentation des processus enfants Java sous Linux est réalisée

J'utilise généralement uniquement C / C ++, mais j'ai eu la chance de m'inquiéter de l'implémentation inférieure de l'application Java lors du débogage, alors notez (Je n'ai pas touché Java donc je suis désolé si j'ai fait une erreur)

Il semble que ProcessBuilder soit utilisé lors de l'exécution d'un programme externe en Java. A ce moment, un processus enfant est créé, et j'ai vérifié au niveau source si le processus enfant est similaire au processus enfant sous Linux.

Quelqu'un enquêtait sur quelque chose de similaire, alors j'ai cité à mi-chemin.

java.lang.ProcessBuilder.start(…)  //OS commun
 → java.lang.ProcessImpl.start(…) //Classe pour UNIX OS(Sous le dossier solaris)
  → java.lang.UnixProcess.<init> // UNIXProcess.java.linux
--------------------Code natif d'ici(Langage C) ---------------------
    → Java_java_lang_UNIXProcess_forkAndExec(...)
       (Vfork à la fin de cette fonction()Est fait)

Citation: Aperçu du journal de programmation ProcessBuilder-Apprentice

Comme ci-dessus, le code C de chaque plateforme est finalement appelé. Pour la couche d'abstraction de plate-forme de JDK, y compris JNI de Coco et al., Consultez les articles suivants. API C qui résume la plate-forme (Java) --Qiita

Avec OpenJDK8, les sources spécifiques sont les suivantes. (Linux mais le chemin est inclus sous solaris)

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

Je le connaissais à l'époque du nom Java_java_lang_UNIXProcess_forkAndExec, mais fork => exec. Plus précisément, il semble que sous Linux, ce soit vfork => ʻexecve`.

Donc, en conclusion, j'ai pu confirmer que la création d'un processus enfant avec ProcessBuilder de Java est une implémentation d'un processus Linux général.

référence

Aperçu du journal de programmation ProcessBuilder-Apprentice jdk8/jdk8/jdk: d94613ac03d8 src/solaris/native/java/lang/UNIXProcess_md.c API C qui résume la plate-forme (Java) --Qiita

Recommended Posts

[Java] [Linux] Etude de la manière dont l'implémentation des processus enfants Java sous Linux est réalisée
Annonce de la disponibilité de Java 11 LTS sur Amazon Linux 2
Sous Linux, l'horodatage d'un fichier est un peu dépassé.
Découvrez où se trouve l'entité Java sur Linux (CentOS cette fois)
L'origine de Manjaro Linux est "Mount Kirimandjaro"
Calculer le taux de partage de mémoire des processus Linux
En Python, changez le comportement de la méthode en fonction de la façon dont elle est appelée
[2020July] Vérifiez l'UDID de l'iPad sous Linux
Quelle est la force de votre Qiita? Statistiques sur le nombre de Contributes visibles dans les données
Vérifiez si le câble LAN est déconnecté sous Linux
Démoniser les processus sous Linux
Mettez la dernière version de Python dans Linux (Debian) du Chromebook
Sakura L'histoire du fonctionnement de la bouteille Python sur Internet
Changer de version lorsque plusieurs versions de java sont incluses dans Linux
Installez la dernière version de Git sur votre serveur Linux
Obtenez le nom d'hôte du PC hôte avec Docker sous Linux
Implémentation de MathJax sur Sphinx
Installez JDK sur Linux
Collez le lien sous Linux
Comment est le progrès? Continuons le boom ?? en Python
Suspendre Thread sur Linux (version corrigée en bas de l'article)
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
Est-il facile de synthétiser un médicament sur le marché?
Django: fait varier le nombre de formulaires enfants en fonction du nombre d'éléments d'entrée
[Linux] Comment désactiver la mise à jour automatique du fichier /etc/resolv.conf (AmazonLinux2)
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
Que faire lorsque l'inode est épuisé sur EC2 Linux
Comment utiliser Jupyter sur le frontal de Spacon ITO
Comment l'API COTOHA juge-t-elle la sensation de "la lune est belle"?
Comment mettre à jour la version Python de Cloud Shell dans GCP
J'ai fait beaucoup de recherches sur la façon dont Python est exécuté