Alıştırma - Hatalı davranan bir işlemi sonlandırma

Tamamlandı

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.

  1. Aşağıdaki komutu yazarak home dizininize geri gidin:

    cd ~
    
  2. 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ın vi hakkında temel düzeyde bilgiye sahip olması gerekir.

  3. 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.

  4. 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.

  5. Ş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.

  1. 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
    
  2. 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ı killyaptığı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
    
  3. 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çin ps -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.

  4. 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.