Alıştırma - Hatalı davranan bir işlemi sonlandırma
Bilgisayarlar kusursuz değildir. Er ya da geç mutlaka yolunda gitmeyen şeyler olacaktır. Sistem yöneticilerinin görevi de bu sorunları tespit edip düzeltmektir.
Sorun yaratan bir Python uygulaması olduğunu düşünün. Çok fazla CPU kullanıyor veya yanıt vermeyi durdurmuş olabilir. Her iki durumda da uygulamayı durdurmak istersiniz. Bir işlemi veya uygulamayı tanımlamak için ps
ve grep
komutlarını kullanabilirsiniz. Ardından kill
komutunu kullanarak durdurabilirsiniz. Şimdi bunu Linux sanal makinenizde deneyelim.
Hatalı davranan bir işlem başlatma
Bir işlemi sonlandıracaksanız öncelikle sonlandıracağınız bir işleme ihtiyacınız olacaktır. Bu adımda bir tane oluşturacağız.
Aşağıdaki komutu yazarak home dizininize geri gidin:
cd ~
Azure Cloud Shell'de aşağıdaki komutu yazarak Linux'un
vi
düzenleyicisini başlatın:vi bad.py
vi
, Linux'un Unix'ten devraldığı ve yaygın bir şekilde kullanılan bir metin düzenleyicidir. Her Bash kullanıcısınınvi
hakkında temel düzeyde bilgiye sahip olması gerekir.vi
içinde ekleme moduna geçmek için i tuşuna basın. Ardından aşağıdaki Python programını yazın:i = 0 while i == 0: pass
Bu program yürütüldüğünde sonsuz döngü oluşturur ve sunucunuzda buna benzer bir şey olsun istemezsiniz.
Ekleme modundan çıkmak için Esc tuşuna basın. Ardından aşağıdaki komutu yazıp Enter tuşuna basarak programı kaydedin ve
vi
uygulamasını kapatın::wq
Komutun başına iki nokta üst üste eklemeyi unutmayın. Komutun devamındaki
w
"yazma",q
ise "çıkış" eylemini belirtir.Şimdi aşağıdaki komutu kullanarak programı çalıştırın ve arka planda çalışmaya devam etmesini sağlayın:
python3 bad.py &
Komutun sonuna ve işaretini (
&
) eklemeyi unutmayın. Aksi takdirde Bash istemine geri dönemezsiniz. Bash ortamında ve işareti bir komutu çalıştırır ve komut tamamlanmasa dahi komut satırına döner.
İlk bakışta belli olmasa da bad.py programı arka planda çalışıyor ve diğer işlemlerden CPU döngüsü çalıyor. Şimdi olan bitene daha yakından bakalım.
İşlemi sonlandırma
Bir işlemi sonlandırmak için işlem adına veya işlem kimliğine ihtiyacınız vardır. Bunun için ps
komutunu kullanmanız gerekir.
Hatırlayacağınız üzere
ps -ef
komutu çalışan tüm işlemleri listeler ve her biri hakkında birçok farklı bilgiler sunar. Aşağıdaki komutu kullanarak tüm çalışan işlemleri listeleyin ve sonuç listesinde içinde "python" geçen satırları filtreleyin:ps -ef | grep python
Sonuçlar şuna benzer olacaktır:
yourname+ 342 254 99 23:34 pts/1 00:00:31 python3 bad.py yourname+ 344 254 0 23:35 pts/1 00:00:00 grep --color=auto python
Listede bad.py programının CPU zamanının yüzde 99'unu kullandığını görebilirsiniz. Program adının hakkını veriyor.
kill
komutu, işlem kimliğini kullanarak çalışan işlemleri sonlandırır. (adlıkillall
ilgili komut, işlem adına göre bir işlemi öldürür.) çağrısıkill
yaptığınızda, işlemi sonlandırmak için ne tür bir "sinyal" kullanacağınıza karar vermeniz gerekir. Sinyal türlerinin bir listesini döndürmek için aşağıdaki komutu kullanın:kill -l
Bir deamon işlemini (arka planda çalışan ve işletim sistemine önemli hizmetler sağlayan işlemler) sonlandıracaksanız bunu hemen yeniden başlatmak isteyebilirsiniz. Bunu yapmak için bir
SIGHUP
sinyali kullanabilirsiniz.Bu örnekte işlemi sonlandırmak istiyorsunuz ancak yeniden başlatmak istemiyorsunuz. Bu nedenle 9 rakamına karşılık gelen
SIGKILL
sinyalini kullanmak istiyorsunuz. Bunun içinps -ef
çıkışından bad.py programının işlem kimliğini (ikinci sütundadır) alın ve aşağıdaki komutu kullanarak işlemi sonlandırın.PROCESS_ID
yerine işlem kimliğini kullanın.kill -9 PROCESS_ID
Aynı komut
kill -s SIGKILL PROCESS_ID
olarak da girilebilir. İsterseniz sinyalin adını, isterseniz de numarasını kullanabilirsiniz.Son adımda bad.py programının çalışmadığını doğrulamak için
ps
komutunu yeniden çalıştırın.
ps
ve kill
komutlarının yaygın olarak kullanıldığı noktalardan biri de "zombi işlemler" olarak da adlandırılan ve hatalı bir şekilde yazılmış programların arkalarında bıraktıkları alt işlemleri tanımlamak ve sonlandırmaktır.