Эцэг процесс (parent process)

Эцэг процесс[засварлах | кодоор засварлах]

Нэг буюу хэд хэдэн процессуудыг үүсгэсэн Unix процесс.

0-ээс бусад процесс бүр нь өөр нэг процессыг салаа системийн дуудлага ажиллуулснаар үүсдэг. Эцэг процесс нь салаа гэдэг нь процесс бөгөөд шинээр үүссэн процесс нь процесс юм. Үйл явц бүр нь нэг процесстой байдаг боловч олон хүүхэд процесс байж чаддаг.

Цөм процессыг тодорхойлогч (PID) процесс бүрийг тодорхойлно. 0 процесс нь системийг ачаалах үед бий болсон тусгай процесс юм; Хүүхэд процессыг (процесс 1) эрж олсны дараа процес 0 нь swapper процесс болдог. Процесс 1 нь init гэж нэрлэгддэг бөгөөд систем дэх бусад бүх процессуудын өвөг дээдэс бөгөөд тэдэнтэй тусгай харилцаатай байдаг.

Эцэг процесс


Linux[засварлах | кодоор засварлах]

Linux кернелд процессууд болон POSIX thread-ийн хооронд маш нимгэн ялгаа байдаг бөгөөд энд хоёр төрлийн процесс байдаг. Эцэг процесс дуусгавар болох үед SIGCHLD дохиог хүлээн авах процесс юм. Харин эцэг процесс хүү процессыг олон тооны орчинд үүсгэсэн утас юм. Ердийн процессийн хувьд эдгээр хоёр утгууд нь адилхан боловч POSIX thread нь процесс байдлаар ажиллахад эдгээр хоёр утга өөр байж болно.

Zombie process[засварлах | кодоор засварлах]

Zombie process гэдэг нэр томъёо нь zombie-ийн нийтлэг тодорхойлолтоос гаралтай. Хэвийн процессоос ялгаатай нь kill команд нь zombie процессд нөлөөлдөггүй. Zombie үйл явц нь orphan процессуудтай холбоотой байж болохгүй orphan процесс нь ажиллаж байгаа боловч эцэг процесс ажилахгүй байгаа юм. Эдгээр нь zombie process хэвээр үлддэг. Харин (orphan иж бүрдлүүдийн адил) тэдгээрийг хүү процесс хүлээх init (процесс ID 1) -оор батладаг. Үүний үр дүн нь zombie болон orphan аль алинтай нь үйл явц автоматаар хураана гэсэн үг юм. Үйлдлийн систем нь процесс бүрийг (ерөнхийдөө "pid" гэж нэрлэнэ) үйл ажиллагаа явуулахад шаардагдах өгөгдлөөрөө дамжуулан үйл явцыг хамарсан хүснэгтийг хадгалж байдаг. Процессийн ашиглалтын хугацааны туршид ийм өгөгдөл процесст заагдсан санах ойн сегментүүд, орчны хувьсагчууд, нөөцийн хэрэглээ, хэрэглэгчийн-id, бүлэг-бүл ба бүлгийн тоонууд, магадгүй бусад төрлийн мэдээллүүд ордог. Үйл явцыг дуусгаад, exit (үндсэн функцээс буцах командыг гүйцэтгэх) эсвэл гэнэт зогсоох дохио хүлээн авснаар (хэрэв далд зарчмаар ажиллаж байгаа бол) үйлдлийн систем нь ихэнх нөөц, энэ процесс, гэхдээ нөөцийн ашиглалт болон дуусгавар болох төлөвийн кодын өгөгдлийг хадгалсаар байдаг. Учир нь эцэг эхийн үйл ажиллагаа амжилттай хэрэгжсэн эсэхийг (сонирхогч этгээдийн төлөв байдлын кодыг кодлох стандарт функцийг ашиглан) болон системийн нөөцийн хэмжээг Гүйцэтгэлийн явцад хэрэглэсэн.

Zombie processes example

#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
	pid_t pids[10];
	int i;

	for (i = 9; i >= 0; --i) {
		pids[i] = fork();
		if (pids[i] == 0) {
			sleep(i+1);
			_exit(0);
		}
	}

	for (i = 9; i >= 0; --i)
		waitpid(pids[i], NULL, 0);

	return 0;
}

Orphan process[засварлах | кодоор засварлах]

Orphan process нь zombie үйл явцын эсрэг нөхцөл байдал юм. Энэ нь "orphan" болох гэж буй хүү процессоос өмнө parent процесс дуусч буй хэрэг юм. хүү процесс дуусгавар болдог (SIGCHLD дохиогоор дамжуулан) ялгаатай нь эцэг процесс дуусах үед хүү процесс мэдэгдэхгүй. Харин оронд нь систем нь өөр өөр процессуудын "өвөг дээдэс" болох процесс болох "эцэг процесс PID" талбарыг дахин тодорхойлох бөгөөд PID нь ерөнхийдөө 1 (нэг), түүний нэр нь уламжлалт "init" юм. Тиймээс, init нь систем дээрх бүх orphan процессыг "бататгах" гэж хэлсэн байдаг.

[[Ангилал :Үйлдлийн систем]]