Maison > Tutoriel système > Linux > Shell et processus Linux

Shell et processus Linux

WBOY
Libérer: 2024-06-12 22:46:30
original
772 Les gens l'ont consulté

Linux之shell 和进程

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
Copier après la connexion

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
Copier après la connexion

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);
}
Copier après la connexion

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 = $$"
Copier après la connexion

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
Copier après la connexion

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!

source:linuxprobe.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal