Linuxda proseslər. Proseslərin identifikatorları.
Demonlar (demons)
Proses – EHM-in yaddaşına yüklənən proqram kodu və verilənlərin
məcmusu anlayışıdır. Proses – yerinə yetirilməmiş proqram
(application) və ya əmrdir. Belə ki, proqram – eyni zamanda bir neçə proses
yarada bilər. Prosesin kodu zamanın cari anaında yerinə yetirilməyə bilər. Belə
ki, proses gözləmə rejimində ola bilər. Bu halda bu cür prosesin kodunun yerinə
yetirilməsi dayandırılmış olur. Proses 3 vəziyyətdə ola bilər:
İşləyən proses – yəni, hal-hazırda bu prosesin kodu yerinə
yetirilir;
Gözləyən (yatmış - sleeping) proses – hal-hazırda bu prosesin kodu yerinə yetirilmir.
Hər hansı bir xəbər gözləyir.
Zombi prosesi – proses özü artıq mövcud deyil, onun kodu və
verilənləri artıq operativ yaddaşdan çıxarılıb. Lakin, bu və ya digər səbəbdən
proseslər cədvəlində qalıb.
Sistemdəki hər bir prosesə 1-65535 diapozonundan
olan bir ədədi identifikator (PID – Preocess Identifier) və ya ana prosesin
identifikatoru (PPID
– Parent Process Idetifier) uyğun gəlir. PID – prosesin adıdır. Bu ada əsasən
ƏS-də biz prosesləri idarə etmək və onlara baxmaq üçün müxtəlif vasitələrdən
istifadə zamanı prosesləri adresləyə bilərik. PPID proseslər arasında valideyn
münasibətlərini təyin edir. Bu proseslər onun əlamətlərini və imkanlarını əhəmiyyətli
dərəcədə müəyyən edir.
Proqramın işi üçün vacib olan digər parametrləri
“prosesin ətrafı” adlandırırlar. Belə parametrlərdən biri – idarə edici (nəzarət
terminalı) terminaldır. Hər hansı bir terminala bağlı olmayan proseslər
“demonlar” adlanır. İstifadəçi tərəfindən işə salınmış bu cür proseslər seans
bitənə qədər öz işini bitirmir, cari seansla əlaqəsi yoxdursa, işini davam
etdirir və avtomatik sona çata bilməz. Bir qayda olaraq demonlar vasitəsilə
server xidmətləri reallaşdırılır. Belə ki, məsələn, çap serveri cupsd demonu –
prosesi jurnallaşdırma isə - syslogd ilə realizə olunur.
ps
əmri
Linuxda proseslərin siyahısına baxmaq üçün ps əmri
istifadə olunur.
ps - parametrsiz şəkildə bu əmr bütün prosesləri göstərir. Bu proseslər
demonlar istisna olmaqla, cari sessia zamanı işə salınan proseslərdir.
ps <PID> – PID nömrəsi göstərilmiş proses haqqında məlumat
sətrini ekrana çıxarır;
ps <options> – burada options, ps əmrinin parametridir. options – aşağıdakı qiymətlərdən
birini və bir neçəsini ala bilər:
-A və ya -e – bütün prosesləri göstərmək;
-f – prosesləri əlifbaya əsasən nizalamaq;
-w – proseslər haqqında məlumatın tam sətrini ekrana çıxarmaq üçün istifadə
olunur. Əgər onlar ekranın uzunluğundan uzundursa, onda yazı növbəti sətrə keçməlidir;
-w w – parametri təsvir olunan sətrin uzunluğuna
qoyulan məhdudiyyətləri ümumiyyətlə götürməyə imkan verir və lazım gəldikdə 2 və
ya daha çox sətri ekrana çıxarır.
Proseslərə
giriş səlahiyyəti. Real və effektiv identifikatorlar. SUID və SGID bitləri
Linux ƏS-də proseslər hansı istifadə tərəfindən
başlanılıbsa və həmin istifadəçinin hansı səlahiyyətləri varsa, o səlahiyyətlərə
də malikdir.
Əslində ƏS onda işləyən istifadəçini həmin istifadəçinin
adından (tərəfindən) yerinə yetirilən proseslər kimi qəbul edir. İstifadəçiyə
aid olan seans terminalda onun adından açılır. Buna görə də “istifadəçinin
fayla giriş səlahiyyəti” dedikdə, istifadəçinin adından fayla girişi yerinə
yetirən proseslərə giriş səlahiyyəti başa düşülür.
Yerinə yetirilən proseslərin istifadəçinin adının təyin
olunması üçün ƏS, prosesi təyin edən istifadə və qrupların real
idetifikatorlarından istifadə edir. Lakin, bu identifikatorlar səlahiyyətlərin
tərin olunmasında qərarverici rol oynayır. Bunun üçün hər bir prosesin daha
effektiv başqa bir identifikatorlar qrupu var.
Bir qayda olaraq, prosesin real və effektiv
identifikatorları eyni olur, lakin, istisnalar da var. Məsələn, passwd utilitləri
ilə iş üçün superistifadəçinin identifikatorunu istifadə etmək lazımdır ki. Belə
ki,yalnız superistifadəçi parol faylına yaza və onu dəyişə bilər. Bu halda
proseslərin effektiv identifikatorlaru real identifikatorlardan fərqlənir.
Hər bir faylın daha bir giriş səlahiyyətləri
mövcuddur – SUID
və SGID
bitləri. Bu bitlər proqram işə salındığı zaman onun sahibinə və qrup
sahibinə effektiv identifikator təyin etməyə və başqa istifadəçinin giriş səlahiyyətləri
ilə prosesi yerinə yetirir. Beləliklə, passwd faylı root istifadəçisinə aiddir və
onda SUID biti
quraşdırılıb. Belə ki, proses işə salındığı zaman passwd, root istifadəçisinin səlahiyyətlərinə
malik olacaq.
SUID və SGID bitləri chmod proqramı vasitəsilə
qurulur.
chmod u+s <file_name> - SUID bitinin quraşdırılması;
chmod g+s <file_name> - SGID bitinin quraşdırılması.
Bu bitlərin quraşdırılması üçün mütləq rejimdə
onları 3 bit şəklində göstərmək lazımdır: uyğun olaraq SUID, SGID, sticky bit.
Xüsusi bitləri quraşdırmaq üçün lazımi səlahiyyətləri
irəli sürdükdən sonra ədədin əvvəlinə rəqəm qoymaq lazımdır.
Proseslərin idarə olunması. Siqnallar
ƏS-də rahat işləmək üçün proseslərin təsviri üsulları,
onlara giriş saləhiyyətinin təyin olunması azdır. Prosesləri daha effektiv şəkildə
idarə etmək lazımdır. İdarəetməni təmin etmək üçün proseslər cədvəlinin
strukturuna baxaq.
Sistemdə bütün proseslərin valideyni init
prosesidir. Onun PID-si 1, PPID isə 0-dır. Proseslər cədvəlinin hamısını ağac şəklində
göstərmək olar. Bu ağacın kökü init olacaq. Bu proses nüvənin bir hissəsi
deyil, lakin, sistemdə böyük rol oynayır.
Adları kvadrat mötərizədə yazılan proseslər (məsələn,
[kventd] ) nüvənin prosesləridir. Bu proseslər sistemin işini idarə edir. Daha
dəqiq desək, onun yaddaş meneceri, prosessorun zaman planlayıcısı, daxili
qurğular kimi bəzi hissələrini idarə edir.
Digər proseslər istifadə prosesləridir və
terminaldan, yaxud sistem işə salındığı zaman başladılıblar.
Hər bir prosesin müddəti aşağıdakı mərhələlərdən
ibarətdir:
1. Prosesin yaradılması:
Bu mərhələdə yeni prosesi yaradan prosesin tam
kopyası yaradılır. Məsələn, siz yerini yetirilməsi üçün terminaldan ls əmrini vermisiz.
Terminal özünün tam kopyasını yaradır.
2. Prosesin kodunun yüklənməsi və yerinə yetirilməyə
hazırlanması:
Birinci mərhələdə yaradılmış nüsxə, yerinə yetirilməsi
vacib olan məsələnin kodu ilə əvəz olunur və onun ətradı yaradılır. Yəni,
lazımi dəyişənlər təyin olunur.
3. Zombi vəziyyəti:
Bu mərhələdə prosesin yerinə yetirilməsi sona
çatıb, onun kodu yaddaçdan çıxarılır, ətrafı dağıdılır, proseslər cədvəldəki
yazısı ilə qalır.
4. Prosesin ölməsi:
Bütün yekun mərhələlərdən sonra, proseslər cədvəlindən
yazı silinir və beləliklə, proses öz işini bitirir.
Prosesin işləməsi zamanı nüvə onun vəziyyətini
yoxlayır və fövqəladə bir hal baş verdikdə ona siqnal göndərmək prosesini idarə
edir. Bu proses susmaya görə fəaliyyət göstərə bilər; və ya əgər, onun siqnal
işlədicisi varsa, onda o, siqnalı tuta və ya yox saya bilər. SIGKILL və SIGSTOP
siqnallarını tutmaq və ya yox saymaq mümkün deyil.
Susmaya görə bir neçə fəaliyyət var:
ignore (yox saymaq) – siqnalın alınmasına baxmayaraq işi davam etdirmək;
bitirmək – prosesin işini bitirmək;
bitirmək + core – prosesin işini bitirmək və cari kataloqda core
adlı fayl yaratmaq; core faylı prosesin yaddaşının obrazını (kod və
verilənlər) özündə saxlayır.
dayandırmaq – prosesin yerinə yetirilməsini dayandırmaq,
lakin, onu bitirməmək və kodu yaddaşdan çıxarmamaq;
Layihəçi, proseslərin həyatında əhəmiyyətli rol
oynayır.
Layihəçi – nüvənin bu hissəsi, sistemin çoxməsələliyinə
cavabdehdir. Bir zaman vahidində prosessorda yalnız bir məsələ yerinə yetirilə
bilər. Məhz, layihəçi (planner) təyin edir ki, işə salınmış proseslərdən hansı
birinci, hansı ikinci yerinə yetiriləcək. Bunun üçün hər bir prosesin
prioriteti adlanan daha bir parametri var. Proseslərin prioritetlərinə baxmaq
üçün ps
əmrini -l
(long – geniş məlumat) parametri ilə vermək olar.
Öz işi zamanı layihəçi ilk növbədə məsələnin yerinə
yetirilməsi prioritetini aşağıdakı ədəd qoyur. Yəni, prioritetini qaldırır. Belə
ki, sıfır prioriteti yalnız kritik sistem məsələlərinə məxsusdur. Mənfi (-)
prioritetlər isə nüvənin proseslərinə məxsusdur. Böyük prioritetli məsələlər
daha az prosessor vaxtı alır və buna görə də onlar bir qayda olaraq yavaş işləyir
və daha az sistem resursları tələb edirlər.
nice, nohup, kill, killall əmrləri
Belə bir sual yaranır ki, bəs istifadəçi prosesləri
ilə sistem parametrlərini idarə edə bilərmi?
Əlbəttə ki, bəli. Bunun üçün Linuxda prosesin
prinsipini dəyişməyə, proseslər siqnal göndərməyə imkan verən alətlər toplusu
var.
nice -<n> <command_name> – prosesin işə düşdükdən sonra yerinə yetiriləcəyi
prioritetini dəyişməyə imkan verir. command_name – əmrin adı göstərilmədən bu əmri
versək, onda nəticədə prosesin cari prioritetini ekrana çıxaracaq. Burada n –
susmaya görə 10-dur. Prioritetlərin diapazonu -20 ilə 19 arasında dəyişir.
nohup <command_name> – hətta, nəzarət terminalını (SIGHUP) itirsə belə, prosesə
işini davam etdirməyə imkan verir. Bu əmri, davamlı işlətmək icra üçün istifadə
etmək əlverişlidir. Siz əmri işə salırsınız və terminal seansını bağlayırsınız.
Əmr öz işini davam etdirir.
kill -<SIGNAL> <pid> – PID identifikatorlu prosesə siqnal göndərir. Əgər siqnal göstərilməyibsə,
bu əmr prosesə susmaya görə SIGTERM siqnalını göndərir.
killall -s <SIGNAL> <process_name> – process_name adlı bütün proseslərə SIGNAL siqnalını göndərir. Əgər siqnal
göstərilməyibsə, bu əmr prosesə susmaya görə SIGTERM siqnalını göndərir.
Bu əmr üçün siqnalı SIG
prefiksi olmadan vermək lazımdır. Ədədi şəkildə uyğunluq və siqnalın adını əldə
etmək üçün killall əmri ilə -l parametri verilir.
No comments:
Post a Comment