Procesul Crearea 1

Cel mai comun mod de a începe procesul - este de a lansa aplicația în Windows Explorer (Explorer), sau în meniul Start (Start), sau prin tastarea numele programului în linia de comandă. Noile procese sunt, de obicei create de:







Atunci când sistemul de operare pornește,

Când vi se solicită să creați un proces - se întâmplă atunci când procesul de rulare creează un nou proces.

În plus, Win32 API oferă mai multe funcții pe care le puteți utiliza pentru a crea și controlul procesului.

Fluxul de proces poate fi creat de un alt proces prin apelarea sistemului de operare CreateProcess.

Crearea unui nou proces

în cazul în care (CreateProcess ( "c: \\ ferestre \\ system32 \\ calc.exe", NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, si, pi))

Acest program creează un nou proces cu programul normal de calc.exe clasa de prioritate performant - Calculator. Dacă procesul de creare a fost finalizat fără eroare, CreateProcess returneaza „true“, un pointer la o structură PROCESS_INFORMATION (pi variabilă) este umplut cu informații despre procesul nou creat: identitatea și descriptori ai procesului și firul primar. În cazul în care procesul părinte nu este necesar pentru a interacționa cu procesul de copil trebuie să închidă procesul și fluxul de descriptori de apelare CloseHandle.

Finalizarea procesului

Procesul poate fi finalizat în patru moduri:

Funcția de intrare a fluxului primar astfel WinMain, returnează controlul (metoda preferată).







Una din cauzele fluxului de proces funcția ExitProcess (care este, de asemenea, de preferat).

Fluxul altui proces determină funcția TerminateProcess (, modul de alarmă nedorit).

Toate firele sunt completate pe cont propriu. Dar acest lucru se întâmplă foarte rar.

Se recomandă proiectarea aplicației, astfel încât procesul este finalizat numai după revenirea funcției de control al fluxului primar. Aceasta este singura modalitate prin care garantează curățarea corectă a tuturor resurselor care fac parte din fluxul principal. Într-o astfel de completare, de exemplu, orice obiecte C ++, prin fluxul de date sunt distruse destructori respective. Sistemul eliberează memoria care a avut loc stiva firului, și stabilește codul de ieșire de proces, care returnează funcția de intrare.

Funcția TerminateProcess apel se termină, de asemenea, procesul. Principala diferență între această funcție și ExitProcess este că aceasta poate provoca orice flux și termina în același timp, orice proces. Funcția TerminateProcess trebuie utilizată numai în cazuri extreme, în cazul în care procesul nu reușește să finalizeze orice alt mod. Procesul nu primește absolut nici o notificare că este completă și aplicația nu poate efectua nici curățarea de resurse sau de a preveni concluzia neașteptată. În acest caz, pierdeți toate datele pe care programul nu a avut timp pentru a rescrie din memorie pe disc. Dar sistemul de operare și în acest caz, eliberează toate resursele deținute de proces.

A patra situație poate apărea dacă toate firele au cauzat ExitThread sau au fost închise de către alte fire prin apelarea TerminateThread. Constatând că în proces nu există nici un fir de execuție, sistemul de operare îl completează imediat. proces de finalizare cod egal cu sfârșitul ultimului flux de cod.

În cazul următoarelor acțiuni completează sistemul de proces.

Performanța tuturor fluxurilor în procesul se încheie.

Toate utilizator-obiecte și GDI-obiecte create de proces, sunt eliminate, iar obiectele nucleu sunt închise, în cazul în care nu sunt utilizate de către un alt proces.

Obiectul „proces“ de bază merge la ralanti, sau nealocat (semnalate), de stat.

„proces“ obiect de bază utilizatorilor de numărare este decrementat de unul.