Linux'ta çalışan işlemleri görüntüleme ve durdurma komutları sistem yönetiminin önemli bir parçası

Şimdiye kadar Linux sisteminin yapısını, bileşenlerini, komut satırını, dosya sistemini ve dosya sisteminin kabuk üzerinden nasıl yönetilebileceğini anlattık. Linux sistem yönetimini sağlamanın önemli bir yanı da sistemde neyin çalıştığını takip etmektir. Günümüzde gelişmiş Linux dağıtımlarının pek çok programı tek bir masaüstünde çalıştırabilmesi ile birlikte bu durum daha da önem kazanmış durumda. Çalışan programların ve komutların oluşturdukları işlemleri izleme, bu işlemlere müdahale etme ve gerektiğinde durdurma işlem yönetiminin temel unsurları. Bu yazıda Linux işlem yönetimi (process yönetimi) konusunu ele alacağız.

Daha önceki anlattığımız konulara bu yazının sağ tarafında yer alan bölümden erişebilirsiniz.

İşlemleri izleme: ps komutu

Bir program sistemde çalıştığında bir işlem olarak anılır. Sistemdeki işlemleri incelemek için kullanılan ps komutu bilinmesi gereken en temel komuttur. Bu komut sistemde çalışan tüm programlar hakkında pek çok bilgi verir.

Ancak ps komutunun sahip olduğu parametreler bu komutu en zor karmaşık komutlardan biri haline getirir. Çoğu sistem yöneticisi, istedikleri bilgileri veren bu parametrelerden sadece kendi işleri ile ilgili belli bir bölümünü sürekli kullanır.

“ps” komutu yalnızca o anki kullanıcının o anki işlemlerini gösterir. Elbette tüm sistemde çalışan işlemleri görmek için de kullanılan parametreler var. Komutun parametresiz direkt kullanımı işlemler hakkında pek detaylı bilgi vermez.

Bir terminal öykünücü (uçbirim) açalım ve komutumuzu verelim;

ps komutu Linux sisteminde işlemleri listeler

Komut çıktısında bash ve ps programlarının çalıştığını görüyoruz. Uçbirim açtığımızda terminalimiz bash kabuğuyla etkileşime girdi ve ilk işlem olarak bash çalıştı. “ps” komutunun kendisi de bir işlem olarak göründü. Bu basit çıktıda programların işlem kimliği (process ID, PID), çalıştığı terminal (TTY) ve işlemcinin (CPU) kullanıldığı süre bilgisi (TIME) görülmektedir.

Parametre kullanımı

“ps” komutunun parametrelerle kullanımı komutu verimli hale getirmektedir. Bu parametreler üç farklı tipte kullanılmaktadır. Her kullanım tipinde onlarca parametre var. Elbette tüm parametreleri akılda tutmak oldukça zor. Dediğimiz gibi, genelde sistem yöneticileri bu parametrelerin kendilerince kullanışlı olan gruplarını kullanırlar.

  • Unix tipi parametreler (bir adet tire ile kullanılır)
  • BSD tipi parametreler (tire kullanılmaz)
  • GNU tipi uzun parametreler (çift tire ile kullanılır)

Unix tipi parametre kullanımına şöyle bir örnek gösterebiliriz:

Unix tipi parametre kullanımında bir adet “-” (tire) kullanılır

Yukarıdaki komut daha detaylı uzun (-l, long) başlıklı liste göstermektedir ve kullanım tipi Unix tipi olarak adlandırılmaktadır.

BSD (BSD Unix versiyonu bir işletim sistemidir ve Berkeley Software Distribution’dan kısaltılmıştır) tipi kullanımda uzun liste ise,

BSD tipi kullanımda tire kullanılmaz

GNU tipi uzun parametre kullanımında Unix ve BSD tipi parametreler kopyalansa da bazı yeni özelikler de eklenmiş. Bu onlarca parametreyi burada tek tek anlatmayacağız. Komutun man sayfasından oldukça detaylı bilgiler alabilirsiniz.

Birçok kullanıcı işlem yönetimini verimli kılmak için Unix ve BSD tipi kullanımı GNU tipi kullanımla birleştirir.

GNU tipi kullanıma sevilen bir parametre olan “forest” parametresini örnek verebiliriz. İşlem bilgilerini hiyerarşik olarak görüntüler. ASCII karakterleriyle sevimli grafikler çizerek bu hiyerarşiyi gösterir.

ps komutuyla sistemdeki tüm işlemleri “-ef” parametrelerini birlikte kullanarak görüntüleyebilirsiniz. Bu parametrelere “forest” parametresini de eklerseniz hiyerarşik şeklide tüm işlemleri görebilirsiniz.

Gerçek zamanlı işlem görüntüleme: top komutu

ps” komutu her ne kadar işlemler hakkında bilgi almak için muhteşem bir komut olsa da bir dezavantajı var.  “ps” komutuyla belirli bir andaki bilgileri görebilirsiniz.

İşlemlerin gerçek zamanlı durumlarını görmek için top komutu kullanılmalıdır.

top komutu işlemleri gerçek zamanlı gösterir

Çıktının ilk bölümü genel sistem bilgilerini gösterir. Sistem saati, sistemin ne kadar süreyle çalıştığı, oturum açmış kullanıcıların sayısı ve sistemdeki yük ortalaması ilk satırda yer alır.

Çalışan, duran ve uyuyan işlem sayısı, genel CPU bilgileri, bellek bilgileri yine üst kısımda yer alırken; çalışan işlemlerle ilgili detayları sütunlarda görülür. Tüm bu bilgiler belli aralıklarla güncellenerek gerçek zamanlı gösterilir.

top komutu ile ekrana gelen bilgiler varsayılan olarak CPU kullanım yüzdesine göre sıralanır. Komut çalışırken etkileşimli bazı komutlar sıralamayı ve sütun bilgilerini istenilen şekilde değiştirebilirsiniz.

“f” tuşuna basarak çıkan tablodan, verileri sıralamak için kullanılacak bilgiler seçilebilir. Çıkan ekranda etkileşimli tuşların hangi değişimleri yaptığı bilgisi yer alır.

ps komutu ve top komutunun sağladığı bilgiler bize sistem kaynaklarını kullanan işlem bilgilerini verdikten sonra, eğer varsa sistem kaynaklarını sömürdüğünü düşündüğümüz ya da sonlandırılması gerektiğini düşündüğümüz işlemleri durdurmamız gerekir.

İşlemleri durdurmak: kill, pkill ve killall komutu

Linux sistemini yönetmenin bir parçası da bir işlemi durdurmanın ne zaman ve nasıl olacağını bilmektir. Bazen bir işlem aşırı şekilde CPU kullanır ve kapanmayı reddedebilir. Linux işlem yönetimi için işlemleri izlemek kadar işlemleri gerektiğinde durdurmak da çok önemlidir.

Linux’taki süreçler birbirleriyle iletişim kurmak için sinyaller kullanır. Bu sinyaller, işlemlerin tanıdığı, önceden tanımlanmış mesajlardır. Sinyali alan bir işlem mesajı yok saymayı veya işleme devam etmeyi seçebilir. Aşağıda bu sinyallerin bazılarını verelim:

Sinyal Adı Tanımı
1 HUP Hangs Up – Süreci kapatır
2 INT Interrupts – Süreci keser, yarıda bırakır
3 QUIT Çalışmayı durdurur
9 KILL Koşulsuz sonlandırır
15 TERM Terminates if possible – Mümkünse sona erdirir
17 STOP Stops unconditionally, but doesn’t terminate –

Koşulsuz olarak durdurur ama sonlandırmaz

18 TSTP Durdurur veya duraklatır, ancak arka planda çalışmaya devam eder
19 CONT STOP veya TSTP sinyalinden sonra yürütülmeye devam eder

Linux sisteminde işlemleri durdurmak için üç komut oldukça etkili çalışır.

1- kill komutu

kill komutu, işlem kimliğine (PID) dayalı olarak süreçlere sinyal göndermenizi sağlar. Varsayılan olarak kill komutu, komut satırında listelenen tüm PID’lere TERM sinyali gönderir. Komut adı yerine PID kullanmak gerektiğinden kill komutunu kullanmak bazen zor olabiliyor.

Bir işlem sinyali göndermek için ya işlemin sahibi siz olmalısınız ya da root olmalısınız.

Örneğin root tarafından başlatılan bir firefox işlemini ele alalım. Öncelikle top komutuyla işlemi görüntüleyelim.

top komutuyla aralarında firefox da olan işlemleri görüntüledik

Firefox komutuyla çalıştırılmış işlemin kullanıcısı görüldüğü gibi “root”. İşlem kimliği ise (PID) 20702. Bu işlemi mevcut oturumla kapatmayı deneyelim.

işlem sahibi root olduğu için kullanıcının kill komutu kabul edilmiyor

Kabuk, kill komutuyla yapmak istediğimiz bu işleme izin verilmediği uyarısını yaptı. Bu işlemi sonlandırmak için root olmak gerekiyor. Eğer başka bir kullanıcıya ait olsaydı ya o kullanıcı ya da root bu işlemi durdurabilirdi.

TERM sinyali, bir işlemin nazikçe durdurulmasını sağlar. Kaçak bir işlem bu isteği yok sayabilir (root olsanız bile). Böyle durumlarda sinyal adlarını veya sinyal numaralarını belirterek“-s” parametresi ile diğer sinyaller bir arada kullanılabilir.

Örneğin root yetkisi olduğu halde kill komutuyla verilen TERM sinyalini yok sayan bir işlem için;

komutu kullanılabilir. İşlemin sona erip ermediğini görmek için ps ya da top komutunu kullanabilirsiniz. Burada “#” simgesinin root yetkisi ile işlem yaptığına dikkat edin. Normal bir kullanıcı için simge “$” işaretidir.

Birden fazla işlem için de kill komutu kullanılabilir;

2- pkill komutu

pkill komutu işlemlerin adını kullanarak komut vermemize izin verir.

Eğer aynı komut birden fazla kullanıcı tarafından yürütülüyorsa, işlemi sonlandırmak için “-u” (user) parametresi ile kullanıcıyı belirtmek faydalı olacaktır.

pkill komutu kullanılırken eğer işlem adı tam bilinmiyorsa, işlem adında geçen herhangi bir kelime yazılabilir. Komut işlemler arasından eşleştirdiklerini sonlandıracaktır.

Ancak bu şekilde bir kullanımda dikkatli olmak gerekir, zira içinde yazdığınız kelime geçen ama mutlak çalışması gereken bir işlemi de sonlandırabilirsiniz. O nedenle komutu kullanırken tam eşleşme yapması için “-f” parametresi kullanılmalıdır.

3- killall komutu

killall komutu, süreçleri PID numaraları yerine isimleriyle durdurmanın güçlü bir yoludur. killall komutu komutta geçen tüm işlemlere TERM sinyali gönderir. killall komutu joker karakterler (wildcard, “*”, “?” gibi) kullanmaya izin verdiğinden bir işlem yığınının sadece bir bölümü belirterekte kullanılabilir.

Bu örnekteki komut, http ile başlayan tüm işlemleri durdurur. Örneğin Apache web sunucusu için çalışan httpd hizmeti gibi.

Bu komutu joker karakterlerle kullanırken -özellikle root yetkisi varken- çok dikkatli olmak gereklidir.

Her zaman olduğu gibi bu komutlarla birlikte kullanılabilecek parametreler ve komutlar hakkında detaylı bilgileri man sayfalarından ya da “help” parametresini kullanarak uygulamanın kendisinden edinebilirsiniz.

–help parametresi pek çok uygulama için faydalı kullanım bilgileri içerir

ya da

Linux işlem yönetimi için gerekli izleme ve işlem durdurma komutlarının nasıl kullanılacağını temel hatlarıyla anlatmış olduk.

Linux yazılarımıza disk yönetimi konusu ile devam edeceğiz.

 

BİR CEVAP BIRAK