Heim > System-Tutorial > LINUX > Linux-Shell und -Prozess

Linux-Shell und -Prozess

WBOY
Freigeben: 2024-06-12 22:46:30
Original
772 Leute haben es durchsucht

Linux之shell 和进程

Führen Sie hier zunächst ein paar Befehle aus:

Drucken Sie die ID des Anmeldevorgangs aus (die immer bis zum Anmelden und Beenden vorhanden ist)

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
Nach dem Login kopieren

Drucken Sie den Shell-Prozess aus, der durch den Anmeldevorgang ausgegeben wurde (existiert immer bis zum Anmelden und Beenden)

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
Nach dem Login kopieren

Wie aus den obigen Befehlen ersichtlich ist:

Die Anmeldeprozess-ID lautet 3411, wodurch der Bash-Shell-Unterprozess 3412 erstellt wird. Zukünftige Skriptausführung,

3412 Wir nennen es hier die Haupt-Shell, die den Subshell-Prozess zur Verarbeitung des Skripts startet.

(Hinweis: In Bash wird die PID des Subshell-Prozesses in einer speziellen Variablen „$$“ gespeichert, und die PPID speichert die ID des übergeordneten Prozesses der Subshell.)

Schreiben wir zwei kleine Programme zur Überprüfung:

george.guo@ls:~$ cat ja.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);
}
Nach dem Login kopieren

george.guo@ls:~$ Katzentest

#!/bin/bash
echo "PID of this script: $$"
echo "test's PPID(system's fork id) = $PPID"
echo "tests's pid = $$"
Nach dem Login kopieren

Die Laufergebnisse sind wie folgt:

george.guo@ls~$ ./ja

PID of this script: 6082
tests PPID(system's fork id)= 6081
echo tests self pid is 6082
yes PID = 6080, yes PPID = 3412
Nach dem Login kopieren

Es ist ersichtlich, dass die übergeordnete Prozess-ID des Ja-Prozesses 3412 ist. Dies ist der untergeordnete Bash-Shell-Prozess des Login-Prozess-Forks und der Haupt-Shell. Das liegt daran

yes wird von der Haupt-Shell ausgeführt. Ja, die Prozess-ID ist 6080, Call System, Fork und die Subshell-ID ist 6081.

Für Systemaufrufe:

Um system() zum Ausführen von Befehlen zu verwenden, müssen mindestens zwei Prozesse erstellt werden. Eine zum Ausführen der Shell (hier lautet die ID 6081),

Der andere oder die anderen werden für Befehle verwendet, die von der Shell ausgeführt werden (hier ist eine Subshell, die der Skripttest selbst ist).

Die Prozess-ID des Skripttests selbst ist 6082.

Das obige ist der detaillierte Inhalt vonLinux-Shell und -Prozess. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:linuxprobe.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage