Bloğa geri dön

Linux'ta Süreçleri Yönetme - ps, kill ve nice Kullanımı Üzerine Bir Kılavuz

Linux'ta Süreçleri Yönetme - ps, kill ve nice Kullanımı Üzerine Bir Kılavuz

Giriş

Çoğumuz bilgisayar kullandığımızda çeşitli uygulamalar çalıştırırız. Bu uygulamalar, sunucu veya işletim sistemi adı verilen programlar tarafından çalıştırılır. Farklı şekillerde çalışan birçok farklı sunucu türü vardır. Bunlardan biri de Linux. Linux, uygulamaları süreçler halinde çalıştırır.

Linux'ta her uygulamayı bir 'süreç' (process) olarak adlandırırız. Sunucu, sürecin yaşam döngüsünün düşük seviyeli yönünü yönetme yeteneğine sahiptir. Bir kullanıcı olarak, bazı yüksek seviyeli yönleri manipüle etmek için sunucuyla etkileşime girmeniz gerekebilir. Çeşitli araçları kullanarak işletim sistemiyle iletişim kurabilir ve onu yönetebilirsiniz. Sunucunun çeşitli yönlerini ve işlevlerini değiştirmek için kullanabileceğiniz birçok komut vardır. İşte takip etmesi kolay bir Ubuntu üzerinde Linux tabanlı sunucunuzu kolayca nasıl kuracağınıza dair bir eğitim. Ayrıca LAMP Yığınını (Linux, Apache, MySQL, PHP) nasıl kuracağınızı öğrenebilirsiniz.

Bu kılavuz, Linux'ta süreçleri yönetmek için ps, kill ve nice komutlarını nasıl kullanabileceğinize odaklanmaktadır.

Linux'ta Çalışan Süreçleri Görüntüleme

  • top

Başlangıç olarak, bilmeniz gereken en temel komutlardan biri top komutudur. Bu araç, sistemde şu anda hangi süreçlerin çalıştığını görselleştirmenize yardımcı olur. Çalıştırdığınızda şu şekilde görünecektir:

top command output

 

Sonucun en üstünde sistem istatistiklerini bulabilirsiniz. Bu size sistem yükü ve görev sayısı gibi şeyler hakkında bilgi verir. Bu örnekte, çalışan bir süreç ve 55 boşta süreç olduğunu belirleyebilirsiniz. Boştaki veya uyuyan süreçler, şu anda kullanmadığınız süreçlerdir. Bu, sistem kaynaklarını işgal etmedikleri anlamına gelir. Son olarak, kullanım istatistikleriyle birlikte açılır pencerenin altına yakın bir yerde çalışan tüm süreçleri görebilirsiniz.

  • htop

Bu komutu kullanmadan önce, aşağıdakileri yazıp çalıştırarak depolardan yüklemeniz gerekir:

Yükledikten sonra, top ile yaptığınız gibi benzer bilgileri görüntülemek için kullanabilirsiniz. Temel fark, htop komutuyla daha kullanıcı dostu bir sonuç elde etmenizdir:

htop command output

Gördüğünüz gibi, bu sonucun takip edilmesi ve yorumlanması kolaydır.

Süreçleri Listelemek için ps Kullanımı

Çalışan süreçleri görüntülemek için yukarıda belirtilen komutları kullanabilseniz de, bunlar her zaman tüm senaryoları kapsamayabilir. Neyse ki elimizde daha güçlü ve esnek bir araç var. Bu, ps komutudur.

Komutu olduğu gibi çalıştırırsanız ne göreceğinize bir göz atalım:

ps command output

Bu çıktıda, mevcut kullanıcı ve oturumla ilişkili olarak çalışan tüm süreçleri görebilirsiniz. Ancak bu size çok fazla bilgi vermez.

Sistemde çalışan tüm süreçlerin daha bütünsel bir görünümünü istiyorsanız, bir argüman kullanmanız gerekir. Bir argüman, terminal ilişkisinden bağımsız olarak tüm kullanıcıların sahip olduğu tüm süreçleri görmenizi sağlar. Çıktı ayrıca oldukça kullanıcı dostu ve okunması kolay bir biçimde görünür. İşte bir örnek:

ps aux

Öte yandan, bu bilgiyi bir ağaç biçiminde de görselleştirebilirsiniz. Burada göreceğiniz gibi, hiyerarşik ilişkiler de belirgin hale gelir:

output in tree format

Bu örnekte, kthreadd'in daha sonra gelen süreçlerin üst öğesi olarak nasıl görüntülendiğini görebilirsiniz.

  • Süreç Kimlikleri (Process ID) Nedir?

As a Linux or Unix kullanıcısı olarak, süreç kimliklerini bilmelisiniz. PID olarak da bilinen bu kimlikler, sistem tarafından her sürece atanan benzersiz kimliklerdir. Sunucu, her bir süreci bu kimlikler sayesinde takip eder. Belirli bir sürecin PID'sini öğrenmek için pgrep komutunu şu şekilde kullanmalısınız:

Sisteminizi başlattığınızda, ilk süreç çalışmaya başlar. Bu sürece init adı verilir. Varsayılan bir mekanizma olarak, init süreci '1' PID'sini alır. Bu sürecin PID'sini aşağıdaki gibi kontrol edebilirsiniz:

Ardından diğer tüm programları veya süreçleri başlatma sorumluluğu init sürecine aittir. Anlaşılacağı üzere, sonraki süreçler artan veya daha büyük PID'lere sahip olacaktır.

  • Üst Süreçler (Parent Processes) Nedir?

Bilinmesi gereken bir diğer kavram da üst süreçtir. Eğer A süreci B sürecini başlatırsa, A süreci B sürecinin üst sürecidir. Bunları birbirinden ayırt etmeye yardımcı olmak için sistem, üst süreçlere bir PPID atar. top, htop ve ps gibi herhangi bir yönetim komutunu çalıştırdığınızda sütun başlıklarında bu PPID'yi fark edebilirsiniz.

  • Üst-Alt İlişkileri Nelerdir?

Bildiğimiz gibi, üst süreçler alt süreçler başlatır. Bu oluşturma işlemi iki adımda gerçekleşir. Birincisi fork() işlemidir. Bu, yeni bir adres alanı oluşturarak başlar. Ayrıca, alt süreçte de kullanılabilir olması için yazma üzerine kopyalama (copy-on-write) yöntemini kullanarak üst sürecin kaynaklarını kopyalar. İkincisi ise exec() işlemidir. Bu işlem, yeni oluşturulan adres alanında bir yürütülebilir dosyanın yüklenmesinden ve çalıştırılmasından sorumludur.

  • Alt Süreç Üst Süreçten Önce Ölürse Ne Olur?

Böyle bir durumda alt süreç bir zombiye dönüşür. Bu durum, üst süreç onun hakkında bazı bilgiler toplayana veya çekirdeğe ilgili bilgilere ihtiyacı olmadığını söyleyene kadar devam eder. Bu gerçekleştikten sonra, sürecin kullandığı kaynaklar serbest kalacaktır.

  • Üst Süreç Alt Süreçten Önce Ölürse Ne Olur?

Bu senaryoda sistem, alt süreci başka bir üst sürece yeniden atayacaktır. Bu, init veya başka bir süreç olabilir.

Linux'ta Süreçlere Sinyal Gönderme

Bir sinyal göndererek belirli bir sürecin size yanıt vermesini sağlayabilirsiniz. Sinyaller, işletim sistemiyle iletişim kurmanıza yardımcı olur. Bir uygulamanın sonlandırılmasını, başlatılmasını sağlamak veya belirli bir davranışı ya da görevi değiştirmek için sinyalleri kullanabilirsiniz.

  • Sinyal Göndermek İçin PID Kullanma

Linux'ta sinyal göndermek için kullanabileceğiniz araçlardan biri kill'dir. Bu komut, adından da anlaşılacağı gibi, bir süreci sonlandırmanıza veya öldürmenize yardımcı olur:

Bu araç, sürece onu sonlandırmasını söyleyen TERM sinyalini gönderir. Komut, uygulamanın temizlik yapmasını ve kolayca çıkmasını sağlar. Programın TERM sinyali üzerine sorunsuz bir şekilde çıkmaması durumunda, doğrudan KILL sinyalini ileterek devam edebilirsiniz:

Bu sinyal programa gitmez. İşletim sistemi çekirdeğine gider. Çekirdek, süreci doğrudan kapatacaktır. Bunu, bir program gönderdiğiniz sinyalleri yok saydığında kullanabilirsiniz.

Bu komutta, sinyalin adını onunla ilişkili numarayla da değiştirebilirsiniz. Örneğin, ‘-TERM’ yerine ‘-15’ kullanabilirsiniz. Benzer şekilde, ‘-KILL’ yerine ‘-9’ yazabilirsiniz.

  • Sinyalleri Çeşitli Amaçlar İçin Kullanma

Sinyalleri, programları öldürmek veya sonlandırmak dışında başka şeyler yapmak için de kullanabilirsiniz. Örneğin, karşılaşabileceğiniz sorunlardan biri arka plan programlarını (daemon) yeniden başlatmaktır. Bir arka plan programı her askıya alma (hang up) sinyali veya HUP aldığında, Apache gibi programlarda yeniden başlatılacaktır. Bunu geçersiz kılmak için aşağıdaki sinyali kullanabilirsiniz:

Bu komut Apache'nin yapılandırmasını yeniden yüklemesini sağlayacaktır. Sonuç olarak, size ilgili içeriği sunmaya devam edecektir.

kill aracıyla hangi sinyalleri gönderebileceğinizi görmek istiyorsanız aşağıdaki komutu kullanın:

list of signals

  • Ada Göre Sinyal Gönderme

Geleneksel olarak, bir sinyali programın PID'sini kullanarak gönderirsiniz. Ancak, sürecin normal adını kullanarak da sinyal gönderme seçeneğiniz vardır. Bunu yapmak için pkill komutunu kullanabilirsiniz. Bu komut, pkill komutunun çalışma şekline benzer şekilde çalışır. Tek fark, süreç adını kullanmanıza izin vermesidir:

Bu pkill komutu, aşağıdaki kill komutunun eşdeğeridir:

Belirli bir süreç yerine her örneğe sinyal göndermek istediğiniz durumlar için de bir komutunuz vardır. Aşağıdaki komut, sistemde çalışan tüm Firefox örneklerine bir TERM sinyali gönderecektir:

Süreç Önceliklerini Ayarlama

Linux komutlarıyla yapabileceğiniz bir diğer şey de öncelikleri ayarlamaktır. Bu, sunucu ortamınızda hangi işlemin önceliğe sahip olduğuna karar verebileceğiniz anlamına gelir. Kritik olduğunu düşündüğünüz belirli işlemler olabilir. Diğerleri o kadar gerekli olmayabilir. Sistem, ikinci gruptaki programları yalnızca bazı kaynaklar boşta kaldığında çalıştıracaktır.

Linux'ta işlem önceliğini niceness komutuyla kontrol edebilirsiniz. Bu değer, yüksek öncelikli görevleri daha az 'nice' (kibar) ve düşük öncelikli işlemleri daha 'nice' (kibar) olarak belirtir. Şöyle düşünün: yüksek öncelikli işlemler kaynakları tükettikleri için daha az kibardır. Düşük öncelikli görevler ise kaynakları paylaştıkları için daha kibardır.

top komutunu çalıştırdığınızda belirli bir işlemin nice değerini görebilirsiniz. Bu değer ‘NI’ sütununda yer alır. Yüksek öncelikli görevlerin nice değerleri ‘-19/-20’ arasında değişir. Düşük öncelikli işlemler ise ‘19/20’ arasında yer alır. Şuna benzer bir şey göreceksiniz:

Bir işlemi kişisel olarak atanmış bir nice değeriyle çalıştırmak istiyorsanız, sadece nice komutunu kullanmanız gerekir:

Bu komut yalnızca belirtilen programı başlatırken çalışacaktır. Halihazırda çalışan bir programın nice değerini değiştirmek istiyorsanız, renice komutunu kullanmalısınız:

Sonuç

Gördüğünüz gibi, buradaki araçlar grafiksel olanlardan oldukça farklıdır. Bu nedenle, yeni başlayan biri için anlaşılması zor olabilir. Bu kılavuz, komutlara aşina olmanıza yardımcı olacaktır. Daha fazla pratik yapmak, daha iyi öğrenmenize ve bunları daha verimli kullanmanıza yardımcı olacaktır.

Linux sunucularınızı daha iyi yönetmenize yardımcı olabilecek diğer kaynaklarımıza göz atın; bunlara dahil olan eğitimler:Linux sunucunuzu SSH anahtar tabanlı kimlik doğrulaması kullanacak şekilde nasıl yapılandıracağınız, whereis, which, whatis, readlink ve find ile Linux VPS sisteminizdeki dosyaların yerini tespit etme, ve bir Linux VPS üzerinde ortam ve kabuk değişkenlerini okuma ve ayarlama.

Keyifli Çalışmalar!

author

Akshay Nagpal

Yazar · CloudSigma

Preslav Dobrev, CloudSigma'da Kreatif Tasarımcı olarak görev yapmakta olup geleneksel ve yenilikçi pazarlama kanallarını kullanarak tutarlı bir kurumsal kimlik oluşturmaya odaklanmaktadır. Sanatsal vizyonu stratejik pazarlamayla harmanlayarak etkili marka anlatıları oluşturma konusunda oldukça yeteneklidir.

Yorumlar

Henüz yorum yapılmamış. İlk siz olun.