Създаване на процес 1

Най-разпространеният начин за стартиране на процес - е да стартирате приложението в Windows Explorer (Explorer), или в менюто Start (Старт), или като напишете името на програмата в командния ред. Нови процеси обикновено са създадени от:







Когато се стартира операционната система,

Когато се появи подкана да се създаде процес - това се случва, когато процеса на работа се създава нов процес.

В допълнение, Win32 API предоставя няколко функции, които можете да използвате, за да създавате и управление на процеса.

технологичен поток може да бъде създаден от друг процес, като се обадите CreateProcess операционна система.

Създаване на нов процес

ако (CreateProcess ( "C: \\ Windows \\ system32 \\ calc.exe", NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, SI, PI))

Тази програма създава нов процес с нормалната програма приоритет клас ефективните calc.exe - калкулатор. Ако процесът на създаване е завършена без грешка, CreateProcess връща "истинска", указател към структура PROCESS_INFORMATION (променлива PI) е изпълнен с информация за новосъздадената процеса: идентичност и описания на процеса и основната нишка. Ако процесът на родител не е необходимо, за да си взаимодействат с процеса на дете тя трябва да затвори процеса и тече описания призовават CloseHandle.

Завършването на процеса

Процесът може да бъде завършена по четири начина:

вход функцията на първичния поток като WinMain на връща контрол (предпочитан метод).







Един от процеса потоци причини ExitProcess функция (който също е за предпочитане).

Потокът от друг процес причинява функция TerminateProcess (нежелателно, режимът на аларма).

Всички нишки са завършени сами по себе си. Но това се случва много рядко.

Препоръчително е да се изработи заявлението, така че процесът е завършен едва след завръщането на функцията на първичния контрол на потока. Това е единственият начин, който да гарантира правилното почистване на всички ресурси, които принадлежат към основния поток. В такъв завършване, например предмети C ++, от потока от данни са унищожени съответните деструктори. Системата освобождава паметта, която се проведе стека с резба, и определя кода на излизане процес, който се връща функцията вход.

Call функция TerminateProcess и прекратява процеса. Основната разлика между тази функция и ExitProcess е, че тя може да доведе до някакъв поток и да завърши в същото време всеки процес. TerminateProcess функция трябва да се използва само в крайни случаи, когато процесът не успее да завърши по друг начин. Процесът не получава абсолютно никакво известие, че тя е пълна и приложението не може да изпълнява всяко почистване на ресурсите или предотвратяване на неочаквано му сключване. В този случай, вие губите всички данни, че програмата не са имали време да се пренапише от паметта на диска. Но операционната система и в този случай, освобождава всички ресурси, притежавани от този процес.

Четвъртата ситуация може да възникне, ако всички нишки са причинили ExitThread или те са били затворени от други теми, като се обадите TerminateThread. Намирането, че в процеса не е част от изпълнение, операционната система веднага го завърши. процес на завършване код равна на края на последния код поток.

В случай на следните действия завършване на системата за процес.

Извършване на всички потоци в процеса, се прекратява.

Всички от потребителя обекти и GDI-обекти, създадени от този процес, се елиминират, а ядрото обекти са затворени, ако те не се използва от друг процес.

Обект ядро ​​"процес" отива на празен ход, или неразпределено (сигнализира), състояние.

"процес" ядро ​​обект потребители Брояч се намалява с една.