Exécutez d'abord quelques commandes ici :
Imprimez l'ID du processus de connexion (qui existe toujours jusqu'à la connexion et la sortie)
george.guo@ls:~$ echo $PPID 3411 george.guo@ls:~$ ps -aux | grep 3411 george.+ 3411 0.0 0.0 99004 4520 ? S 11:00 0:00 sshd: george.guo@pts/46
Imprimez le processus shell généré par le processus de connexion (existe toujours jusqu'à la connexion et la sortie)
george.guo@ls:~$ echo $$ 3412 george.guo@ls:~$ ps -aux | grep 3412 george.+ 3412 0.5 0.0 21380 5120 pts/46 Ss 11:00 0:00 -bash
Comme le montrent les commandes ci-dessus :
L'ID du processus de connexion est 3411, ce qui crée le sous-processus shell bash 3412. Exécution future du script,
3412 Nous l'appelons ici le shell principal, qui démarrera le processus du sous-shell pour traiter le script.
(Remarque : dans bash, le PID du processus sous-shell est stocké dans une variable spéciale « $$ », et le PPID stocke l'ID du processus parent du sous-shell.)
Écrivons deux petits programmes pour vérifier :
george.guo@ls:~$ chat oui.c
#include #include #include <sys/types.h> #include int main() { pid_t pid; pid_t ppid; pid = getpid(); ppid = getppid(); system("./test"); //system will fork a process for exec ./test printf("yes pid = %d, yes ppid = %d\n", pid, ppid); }
george.guo@ls:~$ test chat
#!/bin/bash echo "PID of this script: $$" echo "test's PPID(system's fork id) = $PPID" echo "tests's pid = $$"
Les résultats en cours sont les suivants :
george.guo@ls~$ ./oui
PID of this script: 6082 tests PPID(system's fork id)= 6081 echo tests self pid is 6082 yes PID = 6080, yes PPID = 3412
On peut voir que l'ID de processus parent du processus yes est 3412, qui est le processus enfant du shell bash du fork du processus de connexion et du shell principal. C'est parce que
yes est exécuté par le shell principal. oui L'ID de processus est 6080, appelle le système, le fork et l'ID de sous-shell est 6081.
Pour les appels système :
Utiliser system() pour exécuter des commandes nécessite la création d'au moins deux processus. Un pour exécuter le shell (ici son ID est 6081),
Les autres ou plusieurs sont utilisés pour les commandes exécutées par le shell (voici un sous-shell, qui est le script de test lui-même).
L'ID de processus du test de script lui-même est 6082.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!