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
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
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); }
george.guo@ls:~$ Katzentest
#!/bin/bash echo "PID of this script: $$" echo "test's PPID(system's fork id) = $PPID" echo "tests's pid = $$"
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
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!