Crearea proceselor - studopediya

Crearea unui proces - este în primul rând un mijloc de a crea un mâner pentru proces, în cali-stve care efectuează una sau mai multe structuri de informații, care conține toate informațiile despre acest proces, sistemul de operare necesar pentru a gestiona.







Trei evenimente majore care duc la stabilirea unor procese:

- inițializarea sistemului.

- Operarea procesului preia apelul de sistem pentru a crea un proces.

- procesul de creare a cererii utilizatorului.

În toate cazurile, procesul activ curent trimite un apel de sistem pentru a crea un nou proces.

Sistemul de operare pentru fiecare proces este atribuit un identificator de proces (PID - Process IDentifier)

Când creați un flux de proces pornește automat (este numit principal). La oprirea fluxului principal și procesul se oprește automat. Deoarece procesul este nici un flux fără țintă ia resurse, sistemul automat ștergeri devin inutile proces. Procesul de primar este creat la pornirea sistemului, în același mod de a crea procesul primar și creează flux.

Cererea poate crea, de asemenea, un proces cu fluxul principal, folosind în acest scop funcția CreateProcess (). Prototipul său este în fișierul winbase.h inspiră lumină de groază la prima întâlnire cu el:

BOOL CreateProcess (LPCSTR lpApplicationName,

Primul argument - lpApplicationName - specifică numele fișierului executabil este creat pentru procesul. Dacă numele de fișier este dat fără extensie, este de așteptat să se extindă * .exe, care este atașat la numele fișierului. Dacă numele de fișier se termină cu o perioadă de (.), Apoi * .exe să nu se alăture. Căutați programul fișier executabil este Windows în ordinea următoare.

1. În directorul în care ați descărcat aplicația.

2. În directorul curent.

3. În directorul de sistem Windows.

4. În directorul Windows, care returnează funcția GetWindowDirectory ().

5. directoarele listate în variabila de mediu PATH, care determină ordinea de căutare în ele.







Al doilea argument - lpCommandLine determină linia de comandă transmite fișiere. Dacă lpApplicationName este NULL, atunci banda-st (primul spațiu înainte de a) numele elementului lpCommandLine este considerat executabil.

Al treilea și al patrulea argumentele - lpProcessAttributes, lpThreadAttributes - determina atributele de securitate pro-proces și debitul respectiv. În Windows 9x aceste valori sunt nule.

Al cincilea câmp - bInheritHandles - seturi de moștenire permisiunea / interdicție mânere proces de asteptare, dacă este setat la TRUE. Cu acest nou proces moștenește fiecare mâner transmisibil pentru a deschide în procesul de asteptare. Am moștenit mânerul pentru a avea aceleași valori și privilegii ca diskriptorov originale.

Al șaselea câmp - dwCreationFlag - este o combinație de steaguri de biți care controlează procesul de creare și numirea o prioritate pentru el. Această opțiune vă permite să setați clasa de prioritate pentru procesul a obiectului, împreună cu modul de implementare a acestuia. Există două grupuri de steaguri:

- steaguri ale procesului de creare;

- Steaguri pentru a seta nivelul de prioritate.

Al șaptelea argument - lpEnvironment - un pointer la mediul de setare a noului proces. Aceasta este o listă de expresii de atribuire sub formă de variabilă = valoare. caracter de terminare nul. De obicei, este NULL. Aceasta înseamnă că procesul generat moștenește variabilele de mediu ale procesului părinte. Dacă acest argument nu este NULL, atunci acesta trebuie să conțină un pointer la blocul de memorie conține-zhaschy acele variabile de mediu pe care le va utiliza dătătoare generat de proces.

Al optulea argument Funcția - lpCurrentDirectory - un pointer la un șir de caractere care conține unitatea curentă și directorul pentru procesul generat. Dacă acest argument este NULL, procesul generat moștenește unitatea curentă și directorul procesului părinte. În caz contrar, acest argument ar trebui să indice un șir de caractere care specifică calea completă la instalarea directorului curent, inclusiv litera de unitate și.

Al nouălea argument - lpStartupInfo - un pointer la o structură de tip STARTUPINFO, care descrie modul de a afișa fereastra principală a aplicației.

CreateProcess () funcția argument al X-lea - lpProcessInformation - care indică o structură de tip PROCESS_INFORMATION, în care informația este înregistrată în procesul de copil după crearea sa. Această structură este descrisă cuprinzând un mâner creat proces mâner flux, identificatori unici, și fluxul de proces.

Acesta ar trebui să se concentreze pe ultimele două câmpuri. Faptul că Win32, în cazul în care identificatorul este eliberat, se poate reutiliza. De exemplu, să presupunem că identificatorul de proces atribuit 0x00001111. După identificatorul de proces este eliberat, iar unele nou proces poate fi din nou atribuit același identificator 0x00001111. Acest lucru ar trebui să fie luate în considerare atunci când scrieți programe.