Rasm 3.7 A daraxt ning jarayonlar yoqilgan a tipik Linux tizimi.
THE init AND systemd PROCESSES
Traditional UNIX systems identify the process init as the root of all child processes. init (also known as System V init) is assigned a pid of 1, and is the first process created when the system is booted. On a process tree similar to what is shown in Figure 3.7, init is at the root.
Linux systems initially adopted the System V init approach, but recent distributions have replaced it with systemd. As described in Section 3.3.1, systemd serves as the system’s initial process, much the same as System V init; however it is much more flexible, and can provide more services, than init.
Yoniq UNIX va Linux tizimlari, biz mumkin olish a ro'yxatga olish ning jarayonlar tomonidan ps buyrug'i yordamida . Masalan, buyruq
ps - el
bo'ladi roʻyxat toʻliq hamma uchun ma'lumot hozirda jarayonlar faol tizim. 3.7-rasmda ko'rsatilganga o'xshash jarayon daraxti tizimli jarayongacha bo'lgan asosiy jarayonlarni rekursiv kuzatish orqali tuzilishi mumkin . (Bundan tashqari, Linux tizimlari tizimdagi barcha jarayonlarning daraxtini ko'rsatadigan pstree buyrug'ini beradi.)
Umuman olganda, jarayon bola jarayonini yaratganda, bu jarayon uchun ma'lum resurslar kerak bo'ladi ( CPU vaqt, xotira, fayllar, kiritish-chiqarish qurilmalari) bajarish uchun uning vazifa. Bola jarayon mumkin bo'l qodir uchun olish uning resurslar bevosita dan faoliyat ko'rsatmoqda tizimi, yoki bu mumkin bo'l cheklangan uchun a pastki to'plam ning the ota-ona jarayonining resurslari. Ota-ona o'z resurslarini bolalari o'rtasida taqsimlashi yoki ba'zi resurslarni (masalan, xotira yoki fayllar) bir nechta farzandlari orasida baham ko'rishi mumkin. Bola jarayonini ota-ona resurslarining kichik to'plami bilan cheklash har qanday jarayonni juda ko'p bola jarayonlarini yaratish orqali tizimni ortiqcha yuklashdan saqlaydi.
In qo'shimcha uchun yetkazib berish har xil jismoniy va mantiqiy resurslar, the ota-ona jarayoni boshlang'ich ma'lumotlarini (kirish) bola jarayoniga o'tkazishi mumkin. Masalan , ko'rib chiqing a jarayon kimning funktsiyasi hisoblanadi uchun ko'rsatish the tarkibi ning a fayl - demoq, hw1.c - yoqilgan the ekran ning a Terminal. Qachon the jarayon hisoblanadi yaratilgan, bu bo'ladi kabi olish uning kirishi ota-ona jarayon, fayl nomi hw1.c . Foydalanish bu Fayl nomi, bu bo'ladi ochiq the fayl va yozish the tarkibi tashqariga. Bu mumkin shuningdek olish the nomi the chiqish qurilma. Shu bilan bir qatorda, biroz faoliyat ko'rsatmoqda tizimlari o'tish resurslar bolalar jarayonlariga. Bunday tizimda yangi jarayon ikkita ochiq faylni, hw1.c va terminal qurilmasini olishi mumkin va oddiygina ma'lumotlarni ikkalasi o'rtasida o'tkazishi mumkin.
Qachon jarayon yaratadi a yangi jarayon, ikki imkoniyatlar uchun ijro mavjud:
The ota-ona davom etadi uchun bajarmoq bir vaqtning o'zida bilan uning bolalar.
The ota-ona kutadi qadar biroz yoki hammasi ning uning bolalar bor tugatildi.
U yerda bor shuningdek ikki manzil maydoni imkoniyatlar uchun the yangi jarayon:
Bola jarayoni ota-ona jarayonining dublikatidir (u ham xuddi shunday dastur va ma'lumotlar ota-ona sifatida).
The bola jarayon ega a yangi dastur yuklangan ichiga bu.
Kimga tasvirlab bering bular farqlar, qilaylik birinchi ko'rib chiqing the UNIX faoliyat ko'rsatmoqda tizimi. UNIX da , kabi bizda bor ko'rgan, har biri jarayon hisoblanadi aniqlangan tomonidan uning jarayon identifikator, bu yagona butun son. Fork() tizimi chaqiruvi orqali yangi jarayon yaratiladi . Yangi jarayon asl jarayonning manzil maydonining nusxasidan iborat. Bu mexanizmi imkon beradi the ota-ona jarayon uchun muloqot qilish osongina bilan uning bola jarayoni. Ikkala jarayon ham (ota-ona va bola) ko'rsatma bo'yicha bajarilishini davom ettiradi keyin vilka () , bitta farq bilan: the qaytarish kodi fork( ) uchun nol uchun the yangi (bola) jarayon, holbuki the (noldan farqli) jarayon identifikator bolaning ota-onasiga qaytariladi.
Fork() tizimi chaqiruvidan so'ng , ikkita jarayondan biri odatda jarayonning xotira maydonini yangi dastur bilan almashtirish uchun exec() tizim chaqiruvidan foydalanadi. exec () tizim chaqiruvi ikkilik faylni xotiraga yuklaydi (xotirani yo'q qiladi tasvir ning the dastur o'z ichiga olgan the exec() tizimi qo'ng'iroq qilish) va boshlanadi
#o'z ichiga oladi < sys/types.h > #include < stdio.h > #include < unistd.h >
int asosiy()
{
pid t pid;
/* sanchqi a bola jarayon */ pid = vilkalar ();
agar (pid < 0) { /* xato sodir bo'ldi */ fprintf (stderr, "vilka Muvaffaqiyatsiz"); qaytarish 1;
}
boshqa agar (pid == 0) { /* bola jarayon */
exclp ("/bin/ls", "ls", NULL);
}
boshqa { /* ota-ona jarayon */
/* ota-ona bo'ladi Kutmoq uchun the bola uchun to'liq */
Dostları ilə paylaş: |