Linux Processes Yönetimi

How to Find and Kill Zombie Process on Linux

Processes Nedir?

Çoğumuz Linux’tan bahsettiğinde, aslında işletim sistemini tanımlayan GNU/LINUX adlı bir yazılım kombinasyonundan bahsediyoruz. GNU, çekirdeği çevreleyen ve birçok yaygın UNIX komutunun açık kaynak eşdeğerlerini sağlayan özgür bir yazılımdır. Bu kombinasyonun Linux kısmı, İşletim sisteminin çekirdeği olan Linux çekirdeğidir. Linux çekirdeğinin bir uygulaması, çekirdeğin bir parçası olan birçok alt sistemi ve gerektiğinde modüler bir şekilde yüklenebilen diğerlerini içerir. Linux çekirdeğinin temel işlevleri arasında bir sistem çağrı arabirimi, süreç yönetimi, sanal dosya sistemleri, ağ oluşturma ve aygıt sürücüleri bulunur.
Özetle çekirdek, bir kabuk aracılığıyla kullanıcıdan gelen komutları kabul eder ve bu komutları yerine getiren işlemleri, bellek, diskler, ağ arayüzleri, klavyeler, fareler, monitörler ve daha fazlası gibi cihazlara erişim sağlayarak yönetir. Tipik bir Linux sisteminde binlerce dosya vardır. Dosya Sistemi Hiyerarşi Standardı bu dosyaları düzenlemek için dağıtımlar için bir kılavuz sağlar. Dosya sistem hakkında /proc ve /sys dizinleri bilgi vermektedir.

Processes

Süreçler, komut satırından çalıştırılan kısa süreli komut olabileceği gibi işletim sisteminin açık olduğu süre boyunca çalışan bir ağ servisi de olabilir. Kullanıcıların süreçleri yönetebilmesi için her process’e ait bir PID numarası vardır. Linux altında çalışan ilk process init olup PID numarası her zaman 1′ dir. Init ilk process olduğu için kullanıcı tarafından değil çekirdek tarafından başlatılır.

ps aux | head -2 

Linuxte çalışan her program bir process'tir. Ancak bir program birden fazla process’i olduğunu bilmemiz gerekir. Sürecin yapısında, sürecin bir process id si (sürecin kimliği yani numarası pid)  userid sürecin tanımlandığı kullanıcının kimliği(uid), parent process id (ppid)  bulunmaktadır. 

Bir tarayıcı açtığımız zaman bir process oluşur, yeni bir sekme açtığımızda farklı bir process oluşur. Bu kısımda önemli olan ise, tarayıcı açıldıktan sonra oluşan process sayısı ile diğer açılan sekmelerdeki parent process ler ile aynı olacaktır. 

  • Programlar sabit process id ye sahip değildir. Her yeniden başlatıldığında pid değişmektedir. 
  • Sudo ile çalıştırılan uygulamalar, root yetkisine sahip olarak çalışacak olup, normal kullanıcılar süreç sonlandırılamaz. 

/proc sanal bir dosya sistemidir. Linux’un sunduğu en güçlü özelliklerden biri de / proc dosya sistemidir. Buradaki dosyalar gerçek içerik taşımaz. Çalışma zamanında çekirdek tarafından içerikler güncellenebilir. Sistem belleği, bağlanmış aygıtlar, donanım bilgisi, süreçlerin durumu gibi çekirdeğe ait bilgileri barındırır. ls /proc komutunu çalıştıralım.

ls /proc 

Yukarıdaki çıktıda, numaralandırılmış dosyalar ve dizinler gözükmektedir. Sistemde çalışan her işlem için numaralandırılmış bir dizin vardır. Burada ki dizin adı, çalışan işlemin işlem kimliği (PID) ile eşleşir. Örneğin, sayılardan 72, aynı isimli bir dizin ile temsil edilir, çalışan bir süreci, konfigürasyonunu, bellek kullanımını ve diğer birçok öğeyi tanımlayan dosya ve dizini içeren çalışan bir program olan PID 72’yi belirtir. Çalışan bir Linux sisteminde her zaman bir işlem kimliği veya PID 1 vardır.

Süreç Hiyerarşisi

Çekirdek, önyükleme prosedürü sırasında yüklemeyi bitirdiğinde, init işlemini başlatır ve ona 1’lik PID atar. Bu işlem daha sonra diğer sistem işlemlerini başlatır ve her işleme sıralı bir PID atanır. Başlangıç işlemlerinden herhangi biri diğer işlemleri başlatırken, sırayla diğer işlemleri başlatabilecek işlemleri başlatabilir. Bir süreç başka bir süreci başlattığında, başlatmayı gerçekleştiren sürece üst süreç ve akabinde başlatılan sürece çocuk süreç adı verilir.
Sistem uzun bir süre çalıştığında, /proc/sys/kernel/pid_max dosya üzerinden görüntülenebilen ve yapılandırılabilen maksimum PID değerine ulaşabilir. En büyük PID kullanıldığında, sistem “devredilir” ve aralığın altında bulunan PID değerlerini atayarak sorunsuz bir şekilde devam eder.
Processes, child, parent aile ağacına eşlenebilir. Bu ağacı görüntülemek için pstree komutunu kullanabiliriz. Yani birbirine bağımlı çalışan süreçleri görüntülemek için kullanılır.

pstree 
Blog'a Dön