Heim System-Tutorial LINUX Methodik: Verstehen Sie die Exit-Methode des Linux-Prozesses

Methodik: Verstehen Sie die Exit-Methode des Linux-Prozesses

Dec 31, 2023 pm 01:27 PM
linux linux教程 红帽 linux系统 linux命令 Linux-Zertifizierung Red Hat Linux Linux-Video

Einführung Wenn ein Prozess endet oder mittendrin beendet wird, muss der Kernel die vom Prozess belegten Systemressourcen freigeben. Dazu gehören Dateien, die während der Ausführung des Prozesses geöffnet wurden, angeforderter Speicher usw.
Prozessausgang

Das Beenden eines Prozesses unter Linux wird in zwei Arten unterteilt: normales Beenden und abnormales Beenden:

1.Normalerweise beenden

a. Return in der Funktion main() ausführen.

b. Rufen Sie die Funktion „exit()“ auf

c. Rufen Sie die Funktion _exit() auf

2.Unnormal beenden

a. Rufen Sie wegen der Funktion an

b. Der Prozess empfängt ein Signal und das Signal bewirkt, dass das Programm beendet wird.

Unabhängig davon, welche Exit-Methode verwendet wird, führt das System letztendlich denselben Code im Kernel aus. Dieser Code wird verwendet, um den vom Prozess verwendeten offenen Dateideskriptor zu schließen und den von ihm belegten Speicher und andere Ressourcen freizugeben.

Vergleich mehrerer Exit-Methoden

1. Der Unterschied zwischen Ausstieg und Rückkehr:

exit ist eine Funktion mit Parametern. Nachdem der Exit ausgeführt wurde, wird die Kontrolle an das System übergeben

return ist die Rückkehr nach Ausführung der Funktion. Nachdem renturn ausgeführt wurde, wird die Kontrolle an die aufrufende Funktion übergeben.

2. Der Unterschied zwischen Exit und Abbruch:

Exit ist die normale Beendigung des Prozesses

about ist eine abnormale Beendigung.

exit()- und _exit()-Funktionen

Die Funktionen „exit“ und „_exit“ werden beide verwendet, um den Prozess zu beenden. Wenn das Programm „exit“ oder „_exit“ ausführt, stoppt das System bedingungslos alle verbleibenden Vorgänge, löscht verschiedene Datenstrukturen und beendet die Ausführung des Prozesses.

exit wird in der Header-Datei stdlib.h deklariert, während _exit() in der Header-Datei unistd.h deklariert wird. Der Parameter „exit_code“ in „exit“ ist 0, was bedeutet, dass der Prozess normal beendet wird. Wenn es sich um einen anderen Wert handelt, bedeutet dies, dass während der Programmausführung ein Fehler auftritt.

Der Unterschied zwischen exit() und _exit()

_exit() kehrt unmittelbar nach der Ausführung zum Kernel zurück, während exit() zunächst einige Bereinigungsvorgänge durchführt und dann die Kontrolle an den Kernel übergibt.

Wenn die _exit-Funktion aufgerufen wird, werden alle Dateideskriptoren des Prozesses geschlossen, der Speicher bereinigt und andere Kernel-Reinigungsfunktionen ausgeführt, der Stream wird jedoch nicht aktualisiert (stdin, stdout, stderr ...). Die Exit-Funktion liegt dazwischen die _exit-Funktion Ein Wrapper für _exit, der _exit aufruft und den Stream leert, bevor er ihn aufruft.

Der größte Unterschied zwischen der Funktion „exit()“ und der Funktion „_exit()“ besteht darin, dass die Funktion „exit()“ den Öffnungsstatus der Datei prüft und den Inhalt des Dateipuffers zurück in die Datei schreibt, bevor sie das Exit-System aufruft. Da es in der Linux-Standardfunktionsbibliothek eine Operation namens „gepufferte E/A“ gibt, besteht ihr Merkmal darin, dass im Speicher für jede geöffnete Datei ein Puffer vorhanden ist. Jedes Mal, wenn eine Datei gelesen wird, werden mehrere Datensätze kontinuierlich gelesen, sodass die Datei beim nächsten Lesen direkt aus dem Speicherpuffer gelesen werden kann. Ebenso wird bei jedem Schreiben einer Datei nur in den Speicher geschrieben Wenn bestimmte Bedingungen erfüllt sind (z. B. das Erreichen einer bestimmten Anzahl oder das Vorkommen bestimmter Zeichen usw.), wird der Inhalt des Puffers sofort in die Datei geschrieben. Diese Technologie erhöht die Geschwindigkeit beim Lesen und Schreiben von Dateien erheblich, bringt aber auch ein wenig Probleme beim Programmieren mit sich. Es wird beispielsweise angenommen, dass einige Daten in die Datei geschrieben wurden. Da sie bestimmte Bedingungen nicht erfüllen, werden sie zu diesem Zeitpunkt nur im Puffer gespeichert. Verwenden Sie zum direkten Schließen die Funktion _exit() Der Prozess wird unterbrochen und die Daten im Puffer gehen verloren. Wenn Sie daher die Integrität der Daten sicherstellen möchten, müssen Sie die Funktion exit() verwenden.

Sehen wir uns den Unterschied zwischen ihnen anhand eines Funktionsbeispiels an:

Funktionsbeispiel 1: exit.c

#include
#include

int main()
{
printf("using exit----\n");
printf("This is the content in buffer\n");
exit(0);
}
Nach dem Login kopieren

Das Ausführungsergebnis ist:

using exit----

This is the content in buffer
Nach dem Login kopieren

Funktionsbeispiel 2: _exit.c

#include
#include

int main()
{
printf("using _exit--\n");
printf("This is the content in buffer");
_exit(0);
}
Nach dem Login kopieren

Das Ausführungsergebnis ist:

using _exit--
Nach dem Login kopieren

Die printf-Funktion verwendet gepufferte E/A. Diese Funktion liest den Datensatz automatisch aus dem Puffer, wenn sie auf das Zeilenumbruchzeichen „n“ trifft. Daher wird exit() beendet, nachdem die Daten in den Puffer geschrieben wurden, während die Funktion _exit() direkt beendet wird.

Sie können printf("Dies ist der Inhalt im Puffer"); im Funktionsbeispiel 2 auch in printf("Dies ist der Inhalt im Puffer") ändern (das heißt, am Ende von printf ein n hinzufügen, um das Ergebnis zu sehen ist. Warum passiert das?

Die unterschiedliche Reihenfolge der Beendigung der übergeordneten und untergeordneten Prozesse führt zu unterschiedlichen Ergebnissen

1. Der übergeordnete Prozess endet vor dem untergeordneten Prozess: Diese Situation ist der Waisenprozess, den wir zuvor verwendet haben. Wenn der übergeordnete Prozess zuerst beendet wird, lässt das System den init-Prozess den untergeordneten Prozess übernehmen.

2. Der untergeordnete Prozess wird vor dem übergeordneten Prozess beendet und der übergeordnete Prozess ruft die Wartefunktion nicht auf

In diesem Fall wechselt der untergeordnete Prozess in einen Zombie-Zustand und bleibt dieser, bis das System neu gestartet wird. Wenn sich der untergeordnete Prozess in einem Zombie-Zustand befindet, speichert der Kernel nur einige notwendige Informationen über den Prozess, die der übergeordnete Prozess benötigt. Zu diesem Zeitpunkt belegt der untergeordnete Prozess immer Ressourcen und reduziert außerdem die maximale Anzahl von Prozessen, die das System erstellen kann.

Wie ist der Zombie-Zustand?

Ein Prozess, der beendet wurde, dessen übergeordneter Prozess sich jedoch noch nicht mit den Folgen befasst hat (Informationen über den beendeten untergeordneten Prozess erhalten und die von ihm noch belegten Ressourcen freigeben), wird als Zombie-Prozess bezeichnet.

3. Der untergeordnete Prozess wird vor dem übergeordneten Prozess beendet und der übergeordnete Prozess ruft die Wartefunktion auf

Zu diesem Zeitpunkt wartet der übergeordnete Prozess auf das Ende des untergeordneten Prozesses.

Das obige ist der detaillierte Inhalt vonMethodik: Verstehen Sie die Exit-Methode des Linux-Prozesses. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Apr 02, 2025 am 06:36 AM

Verwenden Sie Python im Linux -Terminal ...

So öffnen Sie Web.xml So öffnen Sie Web.xml Apr 03, 2025 am 06:51 AM

Um eine Web.xml -Datei zu öffnen, können Sie die folgenden Methoden verwenden: Verwenden Sie einen Texteditor (z.

Vier Möglichkeiten zur Implementierung von Multithreading in C -Sprache Vier Möglichkeiten zur Implementierung von Multithreading in C -Sprache Apr 03, 2025 pm 03:00 PM

Multithreading in der Sprache kann die Programmeffizienz erheblich verbessern. Es gibt vier Hauptmethoden, um Multithreading in C -Sprache zu implementieren: Erstellen Sie unabhängige Prozesse: Erstellen Sie mehrere unabhängig laufende Prozesse. Jeder Prozess hat seinen eigenen Speicherplatz. Pseudo-MultitHhreading: Erstellen Sie mehrere Ausführungsströme in einem Prozess, der denselben Speicherplatz freigibt und abwechselnd ausführt. Multi-Thread-Bibliothek: Verwenden Sie Multi-Thread-Bibliotheken wie PThreads, um Threads zu erstellen und zu verwalten, wodurch reichhaltige Funktionen der Thread-Betriebsfunktionen bereitgestellt werden. Coroutine: Eine leichte Multi-Thread-Implementierung, die Aufgaben in kleine Unteraufgaben unterteilt und sie wiederum ausführt.

Kann der Python -Dolmetscher im Linux -System gelöscht werden? Kann der Python -Dolmetscher im Linux -System gelöscht werden? Apr 02, 2025 am 07:00 AM

In Bezug auf das Problem der Entfernung des Python -Dolmetschers, das mit Linux -Systemen ausgestattet ist, werden viele Linux -Verteilungen den Python -Dolmetscher bei der Installation vorinstallieren, und verwendet den Paketmanager nicht ...

Wofür wird der Linux am besten verwendet? Wofür wird der Linux am besten verwendet? Apr 03, 2025 am 12:11 AM

Linux wird am besten als Serververwaltung, eingebettete Systeme und Desktop -Umgebungen verwendet. 1) In der Serververwaltung wird Linux verwendet, um Websites, Datenbanken und Anwendungen zu hosten und Stabilität und Zuverlässigkeit bereitzustellen. 2) In eingebetteten Systemen wird Linux aufgrund seiner Flexibilität und Stabilität in Smart Home und Automotive Electronic Systems häufig verwendet. 3) In der Desktop -Umgebung bietet Linux reichhaltige Anwendungen und eine effiziente Leistung.

Wie ist Debian Hadoop -Kompatibilität? Wie ist Debian Hadoop -Kompatibilität? Apr 02, 2025 am 08:42 AM

Debianlinux ist bekannt für seine Stabilität und Sicherheit und wird in Server-, Entwicklungs- und Desktop -Umgebungen häufig verwendet. Während es derzeit einen Mangel an offiziellen Anweisungen zur direkten Kompatibilität mit Debian und Hadoop gibt, wird dieser Artikel Sie dazu veranlassen, Hadoop in Ihrem Debian -System bereitzustellen. Debian -Systemanforderungen: Bevor Sie mit der Hadoop -Konfiguration beginnen, stellen Sie bitte sicher, dass Ihr Debian -System die Mindestanforderungen von Hadoop erfüllt, einschließlich der Installation der erforderlichen Java -Laufzeitumgebung (JRE) und Hadoop -Pakete. Schritte zur Bereitstellung von Hadoop -Bereitstellungen: Download und Unzip Hadoop: Laden Sie die Hadoop -Version von der offiziellen Apachehadoop -Website herunter und lösen Sie sie

Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann? Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann? Apr 02, 2025 pm 03:48 PM

Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann? Bei der Entwicklung in Go ist die Verbindung zu Oracle -Datenbanken eine übliche Anforderung ...

Ist Debian Strings kompatibel mit mehreren Browsern Ist Debian Strings kompatibel mit mehreren Browsern Apr 02, 2025 am 08:30 AM

"DebianStrings" ist kein Standardbegriff und seine spezifische Bedeutung ist noch unklar. Dieser Artikel kann seine Browserkompatibilität nicht direkt kommentieren. Wenn sich jedoch "DebianStrings" auf eine Webanwendung bezieht, die auf einem Debian -System ausgeführt wird, hängt seine Browserkompatibilität von der technischen Architektur der Anwendung selbst ab. Die meisten modernen Webanwendungen sind für die Kompatibilität des Cross-Browsers verpflichtet. Dies beruht auf den folgenden Webstandards und der Verwendung gut kompatibler Front-End-Technologien (wie HTML, CSS, JavaScript) und Back-End-Technologien (wie PHP, Python, Node.js usw.). Um sicherzustellen, dass die Anwendung mit mehreren Browsern kompatibel ist, müssen Entwickler häufig Kreuzbrowser-Tests durchführen und die Reaktionsfähigkeit verwenden

See all articles