Linux'taki Süreçler Hakkında Bilmeniz Gereken Her Şey [Kapsamlı Kılavuz]


Bu yazıda süreçlerin temel anlayışını ele alacağız ve belirli komutları kullanarak Linux'ta süreçlerin nasıl yönetileceğine kısaca bakacağız.

Süreç, yürütülmekte olan bir programı ifade eder; bir programın çalışan bir örneğidir. Program talimatından, dosyalardan okunan verilerden, diğer programlardan veya bir sistem kullanıcısının girdisinden oluşur.

Süreç Türleri

Linux'ta temel olarak iki tür süreç vardır:

  • Ön plan süreçleri (etkileşimli süreçler olarak da anılır) – bunlar bir terminal oturumu aracılığıyla başlatılır ve kontrol edilir. Yani bu tür işlemleri başlatabilmek için sisteme bağlı bir kullanıcının olması gerekiyor; sistem işlevlerinin/hizmetlerinin bir parçası olarak otomatik olarak başlamamışlardır.
  • Arka plan süreçleri (etkileşimli olmayan/otomatik süreçler olarak da anılır) – bir terminale bağlı olmayan süreçlerdir; herhangi bir kullanıcı girişi beklemiyorlar.

Daemon Nedir?

Bunlar, sistem başlatıldığında başlayan ve bir hizmet olarak sonsuza kadar çalışmaya devam eden özel türdeki arka plan işlemleridir; ölmezler. Sistem görevleri (hizmet olarak çalıştırılır) olarak kendiliğinden başlatılırlar. Ancak init işlemi aracılığıyla kullanıcı tarafından kontrol edilebilirler.

Linux'ta Süreç Oluşturma

Yeni bir süreç normalde mevcut bir süreç bellekte kendisinin tam bir kopyasını oluşturduğunda yaratılır. Alt süreç, üst süreciyle aynı ortama sahip olacaktır ancak yalnızca süreç kimlik numarası farklıdır.

Linux'ta yeni bir süreç oluşturmak için kullanılan iki geleneksel yol vardır:

  • System() İşlevini Kullanma – bu yöntem nispeten basittir, ancak verimsizdir ve önemli ölçüde belirli güvenlik riskleri içerir.
  • fork() ve exec() İşlevini kullanma – bu teknik biraz ileri düzeydedir ancak güvenliğin yanı sıra daha fazla esneklik, hız sunar.

Linux Süreçleri Nasıl Tanımlıyor?

Linux çok kullanıcılı bir sistem olduğundan, yani farklı kullanıcılar sistemde çeşitli programlar çalıştırabileceğinden, bir programın çalışan her örneği çekirdek tarafından benzersiz bir şekilde tanımlanmalıdır.

Bir program, süreç kimliğinin (PID) yanı sıra üst süreç kimliğinin (PPID) yanı sıra, süreçler de şu şekilde kategorize edilebilir:

  • Ana süreçler – bunlar, çalışma zamanı sırasında başka süreçler yaratan süreçlerdir.
  • Alt süreçler – bu süreçler, çalışma zamanı sırasında diğer süreçler tarafından oluşturulur.

Başlatma Süreci

Init süreci sistemdeki tüm süreçlerin anasıdır (ebeveyndir), Linux sistemi başlatıldığında çalıştırılan ilk programdır; sistemdeki diğer tüm süreçleri yönetir. Çekirdeğin kendisi tarafından başlatılır, dolayısıyla prensipte bir ana süreci yoktur.

Başlatma sürecinin süreç kimliği her zaman 1'dir. Tüm yetim süreçler için evlat edinen ebeveyn olarak işlev görür.

Bir işlemin kimliğini bulmak için pidof komutunu kullanabilirsiniz:

pidof systemd
pidof top
pidof httpd

Geçerli kabuğun işlem kimliğini ve üst işlem kimliğini bulmak için şunu çalıştırın:

echo $$
echo $PPID

Linux'ta Süreç Başlatmak

Bir komutu veya programı çalıştırdığınızda (örneğin cloudcmd – CloudCommander), sistemde bir işlem başlatacaktır. Bir ön plan (etkileşimli) işlemini aşağıdaki gibi başlatabilirsiniz; terminale bağlanacak ve kullanıcı bunu girişi gönderebilir:

cloudcmd

Linux Arka Plan İşleri

Arka planda (etkileşimli olmayan) bir işlem başlatmak için & sembolünü kullanın; burada işlem, ön plana taşınana kadar kullanıcıdan gelen girişi okumaz.

cloudcmd &
jobs

Ayrıca bir işlemi [Ctrl + Z] kullanarak askıya alarak da arka plana gönderebilirsiniz; bu, işleme SIGSTOP sinyalini göndererek işlemlerini durduracaktır; boşta kalır:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Yukarıda askıya alınan komutu arka planda çalıştırmaya devam etmek için bg komutunu kullanın:

bg

Bir arka plan işlemini ön plana göndermek için fg komutunu iş kimliğiyle birlikte şu şekilde kullanın:

jobs
fg %1

Şunlar da hoşunuza gidebilir: Linux Komutunu Arka Planda Başlatma ve Terminalde İşlemi Ayırma

Linux'ta Bir Sürecin Durumları

Yürütme sırasında bir süreç, ortamına/koşullarına bağlı olarak bir durumdan diğerine değişir. Linux'ta bir süreç aşağıdaki olası durumlara sahiptir:

  • Çalışıyor – burada ya çalışıyordur (sistemdeki mevcut işlemdir) ya da çalışmaya hazırdır (CPU'lardan birine atanmayı beklemektedir).
  • Bekliyor – bu durumda, bir süreç bir olayın gerçekleşmesini veya bir sistem kaynağının olmasını beklemektedir. Ayrıca çekirdek iki tür bekleme sürecini de birbirinden ayırır; Kesintili bekleme süreçleri – sinyaller tarafından kesilebilir ve kesintisiz bekleme süreçleri – doğrudan donanım koşullarında bekler ve herhangi bir olay/sinyal tarafından kesintiye uğratılamaz.
  • Durduruldu – bu durumda, bir süreç genellikle bir sinyal alınarak durdurulmuştur. Örneğin, hata ayıklaması yapılan bir işlem.
  • Zombi – burada bir süreç öldü, durduruldu ancak süreç tablosunda hâlâ bir girişi var.

Linux'ta Aktif Süreçler Nasıl Görüntülenir?

Sistemde çalışan işlemleri görüntülemek/listelemek için çeşitli Linux araçları vardır; iki geleneksel ve iyi bilinenleri ps ve top komutlarıdır:

1. ps Komutu

Aşağıda gösterildiği gibi sistemdeki etkin süreçlerin seçimi hakkındaki bilgileri görüntüler:

ps 
ps -e | head 

2. üst – Sistem İzleme Aracı

top, aşağıdaki ekran görüntüsünde gösterildiği gibi size çalışan bir sistemin dinamik, gerçek zamanlı görünümünü sunan güçlü bir araçtır:

top 

Daha fazla en iyi kullanım örnekleri için bunu okuyun: Linux'ta 12 EN İYİ Komut Örneği

3. bakışlar – Sistem İzleme Aracı

bakışlar gelişmiş özelliklere sahip nispeten yeni bir sistem izleme aracıdır:

glances

Kapsamlı bir kullanım kılavuzu için şunu okuyun: Bakışlar – Linux için Gelişmiş Gerçek Zamanlı Sistem İzleme Aracı

Aktif işlemleri listelemek için kullanabileceğiniz başka birçok yararlı Linux sistem izleme aracı vardır; bunlar hakkında daha fazla bilgi edinmek için aşağıdaki bağlantıyı açın:

  1. Linux Performansını İzlemek için 20 Komut Satırı Aracı
  2. 13 Daha Faydalı Linux İzleme Aracı

Linux'ta Süreçler Nasıl Kontrol Edilir

Linux'ta ayrıca kill, pkill, pgrep ve killall gibi süreçleri kontrol etmek için bazı komutlar vardır; aşağıda bunların nasıl kullanılacağına dair birkaç temel örnek verilmiştir:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Bu komutların nasıl kullanılacağını derinlemesine öğrenmek ve Linux'ta aktif süreçleri sonlandırmak/sonlandırmak için aşağıdaki bağlantıları açın:

  1. Linux Süreçlerini Sonlandırmak için Kill, Pkill ve Killall Komutları Kılavuzu
  2. Linux'ta Çalışan Süreçler Nasıl Bulunur ve Öldürülür

Sisteminiz donduğunda Linux'ta yanıt vermeyen uygulamaları sonlandırmak için bunları kullanabileceğinizi unutmayın.

Süreçlere Sinyal Gönderme

Linux'ta süreçleri kontrol etmenin temel yolu onlara sinyal göndermektir. Çalıştırılan tüm sinyalleri görüntülemek için bir işleme gönderebileceğiniz birden fazla sinyal vardır:

kill -l

Bir sürece sinyal göndermek için daha önce bahsettiğimiz kill, pkill veya pgrep komutlarını kullanın. Ancak programlar, yalnızca bu sinyalleri tanıyacak şekilde programlanmaları durumunda sinyallere yanıt verebilir.

Sinyallerin çoğu sistem tarafından dahili kullanım içindir veya kod yazan programcılar içindir. Aşağıdakiler bir sistem kullanıcısı için yararlı olan sinyallerdir:

  • SIGHUP 1 – kontrol terminali kapatıldığında bir işleme gönderilir.
  • SIGINT 2 – kullanıcı [Ctrl+C] tuşlarına basarak işlemi kesintiye uğrattığında kontrol terminali tarafından bir işleme gönderilir.
  • SIGQUIT 3 – kullanıcı bir çıkış sinyali gönderirse bir işleme gönderilir [Ctrl+D].
  • SIGKILL 9 – bu sinyal bir işlemi anında sonlandırır (öldürür) ve işlem herhangi bir temizleme işlemi gerçekleştirmez.
  • SIGTERM 15 – bu bir program sonlandırma sinyalidir (kill bunu varsayılan olarak gönderecektir).
  • SIGTSTP 20 – durmasını istemek için kontrol terminali tarafından bir işleme gönderilir (terminal durdurma); kullanıcı tarafından [Ctrl+Z] tuşuna basılarak başlatılır.

Aşağıda, Firefox uygulamasını donduktan sonra PID'sini kullanarak sonlandırmak için kullanılan kill komutlarının örnekleri verilmiştir:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Bir uygulamayı adını kullanarak öldürmek için pkill veya killall'ı şu şekilde kullanın:

pkill firefox
killall firefox 

Linux İşlem Önceliğini Değiştirme

Linux sisteminde tüm aktif süreçlerin bir önceliği ve belirli bir değeri vardır. Daha yüksek önceliğe sahip işlemler normalde daha düşük öncelikli işlemlere göre daha fazla CPU süresi alır.

Ancak root ayrıcalıklarına sahip bir sistem kullanıcısı nice ve renice komutlarıyla bunu etkileyebilir.

Top komutunun çıktısından NI, sürecin nice değerini gösterir:

top  

Bir süreç için iyi bir değer ayarlamak üzere nice komutunu kullanın. Normal kullanıcıların sahip oldukları işlemlere sıfırdan 20'ye kadar güzel bir değer atfedebileceğini unutmayın.
Negatif nice değerleri yalnızca kök kullanıcı kullanabilir.

Bir işlemin önceliğini yenilemek için yenileme komutunu aşağıdaki şekilde kullanın:

renice +8  2687
renice +8  2103

Linux süreçlerinin nasıl yönetilip kontrol edileceğine ilişkin bazı yararlı makalelerimize göz atın.

  1. Linux Süreç Yönetimi: Önyükleme, Kapatma ve Aradaki Her Şey
  2. Toplu Modda 'top' ile Bellek Kullanımına Göre En İyi 15 İşlemi Bulun
  3. Linux'ta En Yüksek Bellek ve CPU Kullanımına Göre En İyi Çalışan İşlemleri Bulun
  4. Linux'ta PID Numarasını Kullanarak İşlem Adı Nasıl Bulunur?

Şimdilik bu kadar! Sorularınız veya ek fikirleriniz varsa aşağıdaki geri bildirim formunu kullanarak bizimle paylaşın.