Inhaltsverzeichnis
Wenn das Programm ausgeführt wird, wie die Hauptfunktion aufgerufen wird, wie die Befehlszeilenparameter an das Programm übergeben werden, wie das typische Speicherplatzlayout aussieht, wie anderer Speicherplatz zugewiesen wird, wie der Prozess Umgebungsvariablen verwendet, die Beendigung des Prozesses usw. Dies sind die Grundlagen der Prozesssteuerung.
Starten und Beenden des Prozesses
Prozessbeendigungssituationen
Prozessstart und -beendigung Abbildung
atexit-Funktion
Exit-Funktion
_e(E)xit-Funktion
ISO C Der Zweck der Definition dieser Funktion besteht darin, dem Prozess eine Möglichkeit zu bieten, das Programm zu beenden, ohne einen Beendigungshandler oder eine Signalverarbeitungsfunktion auszuführen. Ob ISO C den Standard-I/O-Stream löscht, hängt jedoch von der Implementierung des Betriebssystems ab. Unter Unix wird kein Flushing durchgeführt.
Statuscodes der Exit- und _e(E)ixt-Funktionen
Wenn das Programm normal oder abnormal beendet wird, Der Kernel sendet ein Signal an den übergeordneten Prozess. Die Beendigung des untergeordneten Prozesses ist ein asynchrones Ereignis, daher ist dieses Signal auch ein asynchrones Signal. Dieses Signal wird im Allgemeinen standardmäßig vom übergeordneten Prozess ignoriert. Oder stellen Sie eine Signalverarbeitungsfunktion bereit, um die Folgen zu bewältigen. Die Funktionen wait und waitpid sind Teil der Signalverarbeitungsfunktion.
Strukturdiagramm der Umgebungstabelle
存储空间分配函数
函数间跳转策略
寄存器变量会存在回滚现象的探究
Heim Betrieb und Instandhaltung Betrieb und Wartung von Linux Prozessumgebung – Prozessmanagement

Prozessumgebung – Prozessmanagement

Jul 23, 2017 am 11:16 AM
环境 进程

Wenn das Programm ausgeführt wird, wie die Hauptfunktion aufgerufen wird, wie die Befehlszeilenparameter an das Programm übergeben werden, wie das typische Speicherplatzlayout aussieht, wie anderer Speicherplatz zugewiesen wird, wie der Prozess Umgebungsvariablen verwendet, die Beendigung des Prozesses usw. Dies sind die Grundlagen der Prozesssteuerung.


Starten und Beenden des Prozesses

Wenn der Kernel ein C-Programm ausführt, verwendet er die Funktion exec, um eine spezielle Startup-Routine aufzurufen, die sich in der befindet Kernel Ruft Befehlszeilenparameter und Umgebungsvariablenwerte ab.

Prozessbeendigungssituationen

5 normale Beendigungssituationen:

(1)从main函数返回;
(2)调用exit;
(3)调用_exit和_Exit函数;
(4)最后一个线程调用pthread_exit;
(5)最后一个线程从其启动例程返回;
Nach dem Login kopieren

3 abnormale Beendigungssituationen

(1)调用abort;
(2)接到一个信号;
(3)最后一个线程对取消请求做出响应;
Nach dem Login kopieren

Prozessstart und -beendigung Abbildung

Prozessumgebung – Prozessmanagement

atexit-Funktion

Ein Prozess kann bis zu 32 Funktionen registrieren (zum Beispiel: Signalfunktion), die automatisch von der Exit-Funktion aufgerufen werden. Diese Funktionen werden aufgerufen, wenn das Programm beendet wird, um einen Beendigungshandler zu bilden, der Abschlussarbeiten durchführt, bevor der Prozess beendet wird. Die Exit-Funktion verwendet den Registrierungsdatensatz der atexit-Funktion, um zu bestimmen, welche Funktionen aufgerufen werden sollen.

Exit-Funktion

Diese Funktion wird von ISO C definiert und ihre Operationen umfassen die Verarbeitung des Beendigungshandlers und das anschließende Schließen aller Standard-E/A-Streams. Es ist zu beachten, dass Dateideskriptoren, Multiprozesse (Eltern-Kind-Prozess) und Jobsteuerung nicht verarbeitet werden.

_e(E)xit-Funktion
ISO C Der Zweck der Definition dieser Funktion besteht darin, dem Prozess eine Möglichkeit zu bieten, das Programm zu beenden, ohne einen Beendigungshandler oder eine Signalverarbeitungsfunktion auszuführen. Ob ISO C den Standard-I/O-Stream löscht, hängt jedoch von der Implementierung des Betriebssystems ab. Unter Unix wird kein Flushing durchgeführt.

Statuscodes der Exit- und _e(E)ixt-Funktionen

Unabhängig davon, wie der Prozess endet, wird derselbe Code im Kernel ausgeführt (wie aus dem Starten und Beenden des Prozesses hervorgeht). Diagramm). Dieser Code schließt alle Dateideskriptoren und gibt den gesamten Speicherplatz frei.

Nachdem das Programm beendet wurde, verwenden Sie den Exit-Code, um den übergeordneten Prozess über den Prozess zu informieren. Der übergeordnete Prozess verwendet die Funktion „wait“ oder „waitpid“, um die Nachwirkungen des untergeordneten Prozesses abzuschließen (Informationen über den untergeordneten Prozess abzurufen und die vom untergeordneten Prozess belegten Ressourcen freizugeben). Wenn der übergeordnete Prozess den Exit-Status des untergeordneten Prozesses nicht verarbeitet, wird der untergeordnete Prozess zu einem Zombie-Prozess. Im Gegenteil, wenn der übergeordnete Prozess vor dem untergeordneten Prozess beendet wird, wird der untergeordnete Prozess zu einem verwaisten Prozess . Der verwaiste Prozess wird von Prozess Nr. 1 (Init-Prozess) empfangen. Der allgemeine Prozess ist wie folgt:

Wait- und Waitpid-Funktionen
(1)进程终止时,内核逐个检查所有活动的进程;
(2)分析查找该终止进程的子进程;
(3)将该进程的子进程的父进程ID改为1;
Nach dem Login kopieren

Wenn das Programm normal oder abnormal beendet wird, Der Kernel sendet ein Signal an den übergeordneten Prozess. Die Beendigung des untergeordneten Prozesses ist ein asynchrones Ereignis, daher ist dieses Signal auch ein asynchrones Signal. Dieses Signal wird im Allgemeinen standardmäßig vom übergeordneten Prozess ignoriert. Oder stellen Sie eine Signalverarbeitungsfunktion bereit, um die Folgen zu bewältigen. Die Funktionen wait und waitpid sind Teil der Signalverarbeitungsfunktion.

Der Unterschied zwischen den Wait- und Waitpid-Funktionen ist wie folgt:

(1)wait会阻塞调用者进程等待直至第一个终止的子进程到来;
(2)waitpid可以通过参数设置,来实现调用者进程不阻塞,或选择要阻
塞等待的子进程;
Nach dem Login kopieren
Der Aufrufer bezieht sich hier auf den übergeordneten Prozess

Umgebungstabelle und Umgebung Variablen

Strukturdiagramm der Umgebungstabelle

Prozessumgebung – Prozessmanagement

    Jedes Programm erhält eine Umgebungstabelle
  • Die Umgebungstabelle ist auch ein Array von Zeichenzeigern
  • enrivon wird als Umgebungszeiger bezeichnet
  • Das Array von Zeigern wird als Umgebungstabelle
  • Die Zeichenfolge, auf die jeder Zeiger zeigt, wird als Umgebungszeichenfolge bezeichnet.
  • Umgebungsvariable

Die Der Unix-Kernel überprüft die Umgebungszeichenfolge nicht. Die Erklärung hängt vollständig von jedem Anwendungsprozess ab
  • Normalerweise werden Umgebungsvariablen in einer Shell-Startdatei festgelegt, um die Aktionen der Shell zu steuern
  • Umgebung ändern oder hinzufügen Wenn eine Variable verwendet wird, kann sie sich nur auf die Umgebung des aktuellen Prozesses und aller nachfolgenden generierten und aufgerufenen untergeordneten Prozesse (jedoch nicht auf die vorherigen) auswirken, nicht jedoch auf die Umgebung Umgebung seines übergeordneten Prozesses
  • Bezogen auf Umgebungsvariablen Die Funktionen sind wie folgt:

Wie diese Funktionen die Umgebungstabelle ändern

#include<stdlib.h>
char *getenv(const char *name);
      返回值:指向与name关联的value的指针;若未找到,返回NULL

int putenv(char *str);
                       返回值:若成功,返回0;若出错,返回非0
                       
int setenv(const char *name, const char *value,
            int rewrite);
int unsetenv(const char *name);
                两个函数返回值:若成功,返回0;若出错,返回-1</stdlib.h>
Nach dem Login kopieren
Die Umgebungstabelle und Umgebungszeichenfolge werden normalerweise an hohen Adressen (oben) des Speicherplatzes gespeichert. Daher kann der Speicher beim Ändern seines Werts nicht weiter auf hohe Adressen erweitert werden, da sich darunter jedoch Stapelrahmen befinden, kann er nicht nach unten erweitert werden. Der Prozess zum Ändern seines Werts ist wie folgt:

(1) Ändern Sie die Umgebungstabelle

(2) Fügen Sie eine Umgebungstabelle hinzu
1)新value = 旧value,调用malloc函数,在堆区开辟新的存储空间,
将新value复制到这里,再将这片存储区首地址写到环境表相应的位置处。
Nach dem Login kopieren

Hinweis:
1)新增一个环境变量,调用malloc函数开辟新的存储空间,将原来的环
境表复制到该存储区,其次再添加一个环境变量,然后在尾部赋值为NULL,
最后将environ指向该区域;
2)在 1)过程的基础上,调用realloc函数,多次添加环境变量;
Nach dem Login kopieren
Die auf diese Weise geänderten Umgebungsvariablen sind nur gültig, wenn das aktuelle Programm ausgeführt wird. Wenn das Programm endet, wird der entsprechende Speicherbereich vom wiederverwendet System, und diese Änderungen werden ungültig.

Ergänzende Erläuterung der Speicherstruktur

Speicherverwaltungsstrukturdiagramm

Prozessumgebung – Prozessmanagement

    Nicht initialisiertes Datensegment ( Block gestartet durch Symbol):
  • Bevor das Programm mit der Ausführung

    beginnt, initialisiert der Kernel die Daten in diesem Segment auf 0 oder einen Nullzeiger

  • Stapel:
  • Jedes Mal, wenn eine Funktion aufgerufen wird, werden ihre Rücksprungadresse und die Umgebungsinformationen des Aufrufers (z. B. der Wert einiger Maschinenregister) auf dem Stapel gespeichert
  • 共享库:只需在所有进程都可引用的存储区中保存这种库例程的一个副本;

存储空间分配函数

#include<stdlib.h>
void *malloc(size_t size);
void *calloc(size_t nojy, size_t size);
void *realloc(void *ptr, size_t newsize);
         3个函数返回值:若成功,返回非空指针;若出错,返回NULL</stdlib.h>
Nach dem Login kopieren
  • malloc函数:初始值不确定;底层通过调用sbrk函数实现;

  • calloc函数:初始值为0;

  • realloc函数:增加或减少以前分配区的长度;当增加长度时,可能将以前分配区的内容移到另一个足够大的区域,以便在分配区末尾增加存储区,而新增存储区初始值不确定(例如:可变数组的使用);

注意:这些动态分配的函数一般在分配存储空间时,会比要求的大。因为在开辟空间的前后部分存储记录管理信息。因此,在使用时,千万不要越界访问,以免造成不可预知的后果。

函数间跳转策略

在c语言中,goto语句是不能跨函数跳转的。尤其是在函数深层调用时的跳转需求,在出错处理的情况下非常有用。

#include<setjmp.h>
int setjmp(jmp_buf env);
          返回值:若直接调用,返回0;若从longjmp返回,返回非0
void longjmp(jmp_buf env, int val);</setjmp.h>
Nach dem Login kopieren

变量值回滚问题:自动变量和寄存器变量会存在回滚现象。利用volatile属性来避免此类情况的发生。(在给变量赋值时,赋的值回首先存储在内存(存储器变量)中,然后在由cpu取走,存储在cpu的寄存器上(寄存器变量)。在做系统优化时,那些频繁使用的变量,会直接存储到寄存器中而不经过内存。)

寄存器变量会存在回滚现象的探究

在调用setjmp函数时,内核会把当前的栈顶指针保存在env变量中,所以在调用longjmp函数返回该位置时,全局变量、静态变量、易失变量和自动变量如果在调用setjmp和longjmp函数之间它们的值被修改过,是不会回滚到setjmp函数调用之前的值(当然,编译器将auto变量优化为寄存器变量除外)。因为,这些存储器变量的值是存储在内存相应的段中,回到原先栈顶状态时,同样访问的还是原先的内存空间。

然而,对于寄存器变量来说,首先要明确一点:寄存器变量是用动态存储的方式。意思是寄存器变量的值可能存在不同的寄存器中。如果在调setjmp和longjmp函数之间它们的值被修改过,这个值可能不会存到setjmp之前的对其赋值的寄存器中,而在调用longjmp函数后,又回到了调用setjmp函数时的状态。这个时候再读取寄存器变量的值时,读到的是原先那个寄存器中存储的值而不是修改过的那个寄存器中存储的值,所以出现的回滚现象。

Das obige ist der detaillierte Inhalt vonProzessumgebung – Prozessmanagement. 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)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
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)

Erklären Sie, was der Prozess explorer.exe ist Erklären Sie, was der Prozess explorer.exe ist Feb 18, 2024 pm 12:11 PM

Welcher Prozess ist explorer.exe? Wenn wir das Windows-Betriebssystem verwenden, hören wir oft den Begriff „explorer.exe“. Sind Sie neugierig, was dieser Prozess ist? In diesem Artikel erklären wir ausführlich, was der Prozess explorer.exe ist und welche Funktionen und Auswirkungen er hat. Zunächst einmal ist explorer.exe ein Schlüsselprozess des Windows-Betriebssystems. Er ist für die Verwaltung und Steuerung des Windows Explorers (Windows) verantwortlich

Wie läuft der Com-Surrogate-Prozess ab? Wie läuft der Com-Surrogate-Prozess ab? Sep 14, 2022 pm 02:56 PM

„com Surrogate“ ist der Prozess von „C:\Windows\System32\dllhost.exe“. Wenn dieser Prozess auftritt, bedeutet dies normalerweise, dass die „COM+“-Komponente nicht mehr funktioniert Dies liegt daran, dass der Computer das Dateisymbol lädt. Manchmal tritt ein Problem auf, das dazu führt, dass der Computer hängen bleibt. Sie können das Problem in den Computereigenschaften beheben.

Was für ein Prozess ist ccsvchst.exe? Was für ein Prozess ist ccsvchst.exe? Feb 19, 2024 pm 11:33 PM

ccsvchst.exe ist eine allgemeine Prozessdatei, die Teil der Symantec Endpoint Protection (SEP)-Software ist, und SEP ist eine Endpoint Protection-Lösung, die vom bekannten Netzwerksicherheitsunternehmen Symantec entwickelt wurde. Als Teil der Software ist ccsvchst.exe für die Verwaltung und Überwachung SEP-bezogener Prozesse verantwortlich. Werfen wir zunächst einen Blick auf SymantecEndpointProtection(

Die Windows-Wiederherstellungsumgebung kann nicht gestartet werden Die Windows-Wiederherstellungsumgebung kann nicht gestartet werden Feb 19, 2024 pm 11:12 PM

Windows Recovery Environment (WinRE) ist eine Umgebung zur Reparatur von Windows-Betriebssystemfehlern. Nach dem Aufrufen von WinRE können Sie eine Systemwiederherstellung, einen Werksreset, die Deinstallation von Updates usw. durchführen. Wenn Sie WinRE nicht starten können, führt Sie dieser Artikel durch Korrekturen zur Behebung des Problems. Die Windows-Wiederherstellungsumgebung kann nicht gestartet werden. Wenn Sie die Windows-Wiederherstellungsumgebung nicht starten können, verwenden Sie die unten bereitgestellten Korrekturen: Überprüfen Sie den Status der Windows-Wiederherstellungsumgebung. Verwenden Sie andere Methoden, um die Windows-Wiederherstellungsumgebung aufzurufen. Haben Sie versehentlich die Windows-Wiederherstellungspartition gelöscht? Führen Sie unten ein direktes Upgrade oder eine Neuinstallation von Windows durch. Wir haben alle diese Korrekturen ausführlich erläutert. 1] WLAN prüfen

Was sind die Unterschiede zwischen Python und Anaconda? Was sind die Unterschiede zwischen Python und Anaconda? Sep 06, 2023 pm 08:37 PM

In diesem Artikel lernen wir die Unterschiede zwischen Python und Anaconda kennen. Was ist Python? Python ist eine Open-Source-Sprache, die großen Wert darauf legt, den Code durch Einrücken von Zeilen und Leerzeichen leicht lesbar und verständlich zu machen. Aufgrund seiner Flexibilität und Benutzerfreundlichkeit eignet sich Python ideal für eine Vielzahl von Anwendungen, darunter unter anderem wissenschaftliches Rechnen, künstliche Intelligenz und Datenwissenschaft sowie die Erstellung und Entwicklung von Online-Anwendungen. Wenn Python getestet wird, wird es sofort in Maschinensprache übersetzt, da es sich um eine interpretierte Sprache handelt. Einige Sprachen, wie zum Beispiel C++, erfordern eine Kompilierung, um verstanden zu werden. Kenntnisse in Python sind ein großer Vorteil, da es sehr einfach zu verstehen, zu entwickeln, auszuführen und zu lesen ist. Das macht Python

So beenden Sie Zombie-Prozesse unter Linux ordnungsgemäß So beenden Sie Zombie-Prozesse unter Linux ordnungsgemäß Feb 19, 2024 am 10:40 AM

In Linux-Systemen sind Zombie-Prozesse spezielle Prozesse, die beendet wurden, aber noch im System verbleiben. Obwohl Zombie-Prozesse nicht viele Ressourcen verbrauchen, können sie bei zu vielen Ressourcen zur Erschöpfung der Systemressourcen führen. In diesem Artikel erfahren Sie, wie Sie Zombie-Prozesse korrekt entfernen, um den normalen Betrieb des Systems sicherzustellen. 1Linux-Zombie-Prozess Nachdem der untergeordnete Prozess seine Aufgabe abgeschlossen hat und der übergeordnete Prozess den Status nicht rechtzeitig überprüft, wird der untergeordnete Prozess zu einem Zombie-Prozess. Der untergeordnete Prozess wartet auf die Bestätigung des übergeordneten Prozesses und das System wird ihn erst wiederverwenden, wenn er abgeschlossen ist. Andernfalls bleibt der Zombie-Prozess weiterhin im System hängen. Um zu überprüfen, ob Zombie-Prozesse im System vorhanden sind, können Sie den Befehl top ausführen, um alle laufenden Prozesse und mögliche Zombie-Prozesse anzuzeigen. Das Ergebnis des Befehls „top“ ist in der Abbildung oben unter Linux zu sehen.

So stoppen Sie Prozessaktualisierungen im Task-Manager und beenden Aufgaben einfacher in Windows 11 So stoppen Sie Prozessaktualisierungen im Task-Manager und beenden Aufgaben einfacher in Windows 11 Aug 20, 2023 am 11:05 AM

So unterbrechen Sie Task-Manager-Prozessaktualisierungen in Windows 11 und Windows 10. Drücken Sie STRG+Fenstertaste+Entf, um den Task-Manager zu öffnen. Standardmäßig öffnet der Task-Manager das Fenster „Prozesse“. Wie Sie hier sehen können, sind alle Apps endlos in Bewegung und es kann schwierig sein, auf sie zu zeigen, wenn Sie sie auswählen möchten. Drücken Sie also die STRG-Taste und halten Sie sie gedrückt. Dadurch wird der Task-Manager angehalten. Sie können weiterhin Apps auswählen und sogar nach unten scrollen, müssen jedoch jederzeit die STRG-Taste gedrückt halten.

Detaillierte Erläuterung der Methode zur Anpassung der Linux-Prozesspriorität Detaillierte Erläuterung der Methode zur Anpassung der Linux-Prozesspriorität Mar 15, 2024 am 08:39 AM

Detaillierte Erläuterung der Linux-Prozessprioritätsanpassungsmethode Im Linux-System bestimmt die Priorität eines Prozesses seine Ausführungsreihenfolge und Ressourcenzuteilung im System. Eine angemessene Anpassung der Priorität des Prozesses kann die Leistung und Effizienz des Systems verbessern. In diesem Artikel wird detailliert beschrieben, wie Sie die Priorität des Prozesses unter Linux anpassen, und es werden spezifische Codebeispiele bereitgestellt. 1. Überblick über die Prozesspriorität Im Linux-System ist jedem Prozess eine Priorität zugeordnet. Der Prioritätsbereich liegt im Allgemeinen zwischen -20 und 19, wobei -20 die höchste Priorität und 19 die höchste Priorität darstellt

See all articles