Linux

Linux-da siqnallar nə üçün istifadə olunur?

Bu daşqında mən Linux-da xarici proseslərlə əlaqə saxlamağa imkan verən siqnallar haqqında danışacağam.

Linux-da siqnallar, proseslər arasında asinxron ünsiyyət və hadisələrin idarə olunması üçün vacib bir mexanizmdir. Onlar sistemin işini yönləndirmək, proseslərin vəziyyətini izləmək və müvafiq tədbirləri görmək üçün istifadə olunur. Aşağıda siqnalların istifadəsi və funksiyaları haqqında daha ətraflı məlumat verilir:

1. Proses İdarəetməsi

Siqnallar, bir prosesin başqa bir prosesi idarə etməsi üçün istifadə olunur. Məsələn:

  • SIGINT: İstifadəçi Ctrl+C kombinasyonunu basdıqda göndərilir və prosesi dayandırır.
  • SIGTERM: Bir prosesi nəzakətlə dayandırmaq üçün göndərilir. Proses bu siqnalı alanda, bağlanmadan əvvəl öz resurslarını təmizləyə bilər.

2. Hadisələrə anında  reaksiya

Proseslər müəyyən siqnallara cavab verərək xüsusi hadisələrə reaksiya verə bilərlər:

  • SIGUSR1/SIGUSR2: İstifadəçi tərəfindən müəyyən funksiyaları icra etmək üçün yaradılan xüsusi siqnallardır. Proseslər bu siqnalları öz tətbiqlərinə uyğun olaraq işləyə bilər.

3. Giriş/Çıxış Hadisələri

Siqnallar, giriş/çıxış hadisələrinin baş verdiyini bildirmək üçün istifadə olunur:

  • SIGIO: Giriş/çıxış hadisələrinin baş verdiyini göstərir. Bu siqnal, proseslərin fayl və ya şəbəkə əməliyyatları zamanı baş verən hadisələri izləməsinə imkan tanıyır.

4. Prosesin idarə edilməsini dəyişdirmək

Proseslər siqnallarla öz davranışlarını dəyişə bilərlər:

  • SIGHUP: Prosesin konfiqurasiya faylını yeniləməsini bildirmək üçün istifadə edilir. Məsələn, bir server proqramı bu siqnal aldıqda, konfiqurasiyasını yenidən yükləyə bilər.

5. İdarəetmə və Monitorinq

Siqnallar, sistemin idarə olunması və monitorinqi üçün də istifadə edilir:

  • SIGKILL: Prosesin dərhal dayandırılması üçün göndərilir. Bu siqnal, prosesi heç bir təmizlik etmədən bağlayır.
  • SIGSTOP: Prosesin icrasını dayandırır (dayanma rejimi). Proses bu siqnalı almadan davam etməyə davam edir.

6. İstifadəçi və proses əlaqəsi

Siqnallar, istifadəçilərin sistemdəki proseslər ilə interaktiv ünsiyyət qurmasına imkan verir:

  • İstifadəçi, terminalda bir prosesin dayandırılması və ya yenidən başlaması üçün siqnallardan istifadə edə bilər.

7. İdarəetmə İlə bağlı hadisələr

Proseslərin idarə olunması və resursların istifadəsi ilə bağlı vəziyyətlərdə siqnalların istifadəsi:

  • SIGQUIT: Prosesin tərtib edilməsi zamanı istifadə olunur. Proses bu siqnalı aldıqda, özünün vəziyyətini yaddaşa yazır.

Siqnalların İdarə edilməsi üçün

Proseslər siqnalları tutmaq (handle), ignor etmək (ignore) və ya standart davranışını dəyişmək üçün proqramlaşdırıla bilər. Bunun üçün signal və ya sigaction funksiyaları istifadə edilir. Siqnalları tutmaq üçün yazılan kod, prosesi uyğun şəkildə yönləndirmək üçün əlverişli bir vasitədir.

Nəticə olaraq

Beləliklə, siqnallar Linux-da sistemin mükəmməl idarə olunmasına, proseslər arasında effektiv ünsiyyətə və hadisələrin düzgün reaksiya verilməsinə imkan tanıyan vacib bir mexanizmdir. Onlar proqramların və sistemin dinamikliyini artırır, eyni zamanda mühitdəki qarşılıqlı təsirləri asanlaşdırır.

Linux-da proqramlarla işləyən insanların əksəriyyəti proqramı dayandırmaq üçün ən azı bir dəfə kill 3942, kill all my-app əmrlərindən istifadə edib. 3942 id ilə prosesin dayandırılmasını istədikdə kill 3942 əmrindən istifadə edirik. Burada kill əmri ilə əslində müvafiq prosesə ötürülmək üçün əməliyyat sisteminə siqnal göndərilir. Əməliyyat sistemi, prosesi maraqlandıran siqnallardan biridirsə, bu mesajı prosesə ötürür. Siqnal prosesi maraqlandırmayan bir siqnaldırsa, əməliyyat sistemi müvafiq siqnalın əvvəlcədən təyin edilmiş davranışı ilə lazım olanı edir.

Adından fərqli olaraq kill əmri yalnız prosesi öldürmək üçün lazım olan siqnalı göndərmir, o, siqnal göndərmək üçün nəzərdə tutulmuş ümumi təyinatlı bir vasitədir. Parametrsiz istifadə edilərsə, zərif şəkildə çıxmaq üçün proseslərə SIGTERM siqnalını göndərir.

Kill əmri ilə göndərilə bilən siqnallar kill -l ilə sıralana bilər.

Əgər kill əmrinə başqa bir siqnal göndərmək istəsək, kill əmrinə parametr kimi müvafiq siqnal verə bilərik.Aşağıdakı bc – əsas kalkulyator proqramı işə salındı, onun id-si pgrep ilə tapıldı və SIGINT -INT parametri ilə göndərildi.

SIGTERM üçün əməliyyat sisteminin standart davranışı prosesi dayandırmaqdır, lakin işlərinin yarımçıq qalmasını istəməyən proseslər əməliyyat sisteminə SIGTERM siqnalı ilə maraqlandıqlarını bildirə və bu siqnalın onlara ötürülməsini tələb edə bilər. . Bu yolla proseslər bağlanma üçün lazımi hazırlıqları görə bilər – məsələn, yarımçıq qalmış işlərini tamamlamaq, qeyd etmək və s. Bu, əməliyyat sistemi bağlandıqda da baş verir. Əməliyyat sistemi bütün işləyən proseslərə SIGTERM siqnalını göndərir və 5-10 saniyə verir. Bu müddətdə proseslər bağlanmazsa, məcburi şəkildə dayandırılır. Burada məcburi xitam SIGKILL ilə təmin edilir.

Siz əvvəl elə bir vəziyyətlə qarşılaşmısınız ki, proses kill 3942 ilə öldürülə bilməz, lakin -9 parametri ilə öldürülür. Burada SIGTERM ilə gözəl şəkildə öldürülə bilməyən proses -9 nömrəli SIGKILL siqnalı ilə zorla öldürülür.

İndi kill -l ilə yuxarıda sadaladığımız proseslərlə əlaqə saxlamağa kömək edən bəzi digər mühüm siqnalları araşdıraq.

SIGHUP, prosesə onun konfiqurasiyasının dəyişdiyini bildirdiyimiz siqnaldır və buna görə də konfiqurasiyasını yenidən oxumalıdır. Bu siqnalı göndərməklə, konfiqurasiya dəyişikliyi zamanı – mümkünsə, prosesi yenidən başlatmaq ehtiyacının qarşısını almağa çalışırıq.

SIGINT (kəsinti) kernelddən başladığımız proses davam edərkən ctrl+C düymələrini basdığımız zaman göndərilən siqnaldır.

SIGSEGV, proses qeyri-qanuni əməliyyat həyata keçirdikdə (məsələn, ona aid olmayan yaddaş sahəsinə daxil olmaq) ƏS tərəfindən göndərilən siqnaldır.

SIGUSR1SIGUSR2 proqrama istədiyi kimi istifadə etmək üçün verilən siqnallardır. Məsələn, dd əmrinin neçə bayt kopyaladığı barədə məlumat almaq istədikdə, bu, uzun müddət çəkə bilər, prosesə SIGUSR1 əmrini verərək, prosesi aşağıdakı kimi ekranda çap edə bilərik.

Related Articles

Bir cavab yazın

Sizin e-poçt ünvanınız dərc edilməyəcəkdir. Gərəkli sahələr * ilə işarələnmişdir

Back to top button