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 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.
SIGUSR1 və SIGUSR2 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.