Der Befehl exec wird unter Linux verwendet, um bestimmte Befehle aufzurufen und auszuführen. Der Befehl exec wird normalerweise in Shell-Skripten verwendet, um andere Befehle auszuführen. Wenn Sie den Befehl exec im aktuellen Terminal verwenden, ersetzt der angegebene Befehl nach der Ausführung den aktuellen Prozess, anstatt einen neuen untergeordneten Prozess zu erstellen.
exec [选项]
Optionen | Bedeutung |
---|---|
-c | Verwenden Sie eine leere Umgebung zur Ausführung |
-a | Die Shell übergibt den Namen als Nullargumente an den ausgeführten Befehl |
-l | Fügen Sie am Anfang der Shell einen Bindestrich ein, um Parameter an den Befehl zu übergeben |
// 首先使用echo命令将文本“www.linuxyz.cn”进行输出: [root@bunian ~]# echo www.bunian.cn www.bunian.cn // 然后再使用exec命令调用echo命令输出同样的信息,并且对输出的信息进行对比,输入指令如下所示: [root@bunian ~]# exec -c echo www.bunian.cn www.bunian.cn // 通过比较两者执行后的结果来看,所实现的功能是相同的,即使用exec命令调用echo命令成功。
// 查找bunian.txt 并备份为bunian.txt.bak [root@bunian ~]# find /test -name "bunian.txt" -exec cp {} {}.bak \;
1. Der Systemaufruf exec ersetzt den ursprünglichen Prozess durch einen neuen Prozess, die PID des Prozesses bleibt jedoch unverändert. Daher kann davon ausgegangen werden, dass der Exec-Systemaufruf keinen neuen Prozess erstellt, sondern nur den Inhalt des ursprünglichen Prozesskontexts ersetzt. Das Codesegment, das Datensegment und das Stapelsegment des ursprünglichen Prozesses werden durch den neuen Prozess ersetzt.
Ein Prozess umfasst hauptsächlich die folgenden Aspekte:
2. exec ist ein Funktionscluster, bestehend aus 6 Funktionen, beginnend mit excl und execv.
Um den Exec-Systemaufruf auszuführen, verwenden Sie normalerweise die Funktion fork(), um einen neuen Prozess zu erstellen, und lassen Sie den Prozess dann den Exec-Aufruf ausführen. Wir wissen, dass nach dem Erstellen eines neuen Prozesses durch fork () der übergeordnete Prozess das Codesegment mit dem untergeordneten Prozess teilt, der Datenraum jedoch getrennt ist, der übergeordnete Prozess jedoch den Inhalt seines eigenen Datenraums in den untergeordneten Prozess kopiert Der Kontext wird auch in den untergeordneten Prozess kopiert. Um die Effizienz zu verbessern, wird eine Copy-on-Write-Strategie angewendet, das heißt, wenn ein untergeordneter Prozess erstellt wird, wird der Adressraum des übergeordneten Prozesses nicht kopiert. Der übergeordnete und der untergeordnete Prozess haben nur einen gemeinsamen Adressraum Wenn der untergeordnete Prozess Daten schreiben muss (z. B. Daten in den Puffer schreiben), wird zu diesem Zeitpunkt der Adressraum kopiert und der Puffer wird in den untergeordneten Prozess kopiert. Dadurch verfügen die übergeordneten und untergeordneten Prozesse über unabhängige Adressräume. Für exec nach fork() kann diese Strategie die Effizienz erheblich verbessern. Wenn Sie zu Beginn kopieren, werden die Daten des untergeordneten Prozesses nach exec aufgegeben und durch einen neuen Prozess ersetzt.
Das obige ist der detaillierte Inhalt vonHandbuch zum Linux-Exec-Befehl. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!