Süreç Yönetimi (Process Management)

Tarih: 2026-06-15 | Kategori: Linux

Etiketler: Linux

Linux'ta "süreç" (process) terimi, belleğe yüklenen ve işlemcide (CPU) yürütülen bir program olarak tanımlanır. Süreçler, komut satırından çalıştırılan kısa komutlardan, işletim sisteminin açık olduğu süre boyunca çalışan ağ hizmetlerine kadar çeşitlilik gösterebilir.

Süreç Türleri (Types of Processes)

Ön Plan Süreçleri (Foreground Processes)

Varsayılan olarak tüm süreçler ön planda çalışır. Klavyeden girdi alırlar ve çıktıyı ekranda görüntülerler. `pwd` komutunu çalıştırmak, ön plan sürecine iyi bir örnektir.

root@hackerbox:~$ pwd

/root

Bu örnekte, `pwd` komutu tarafından yürütülen süreç ön planda çalıştı, çıktıyı görüntüledi ve görevini tamamladıktan sonra çıktı (sonlandı). Ön plan süreçleri, görevlerini bitirene kadar terminali kilitler ve bu süre zarfında başka işlemlerin yapılmasına izin vermez.

Arka Plan Süreçleri (Background Processes)

Arka plan süreçleri çalıştırıldığında terminali kilitlemez; arka planda çalışmaya başlarlar. Arka plan süreçleri çalışırken, birden fazla süreç paralel olarak çalışabilir.

Bir komutu arka planda çalıştırmak için sonuna `&` karakterini ekleyin. Örneğin, `pwd` komutunu arka planda çalıştıralım:

root@hackerbox:~$ pwd &

[1] + Done pwd

İlk örneğin aksine, `pwd` komutu bir arka plan süreci olarak çalıştırıldığı için geçerli dizinin yolunu yazdırmadı. Bunun yerine, başlattığı arka plan süreci hakkında bilgi verdi.

  • `[1]`, sürecin iş numarasının (job number) 1 olduğunu belirtir.
  • `Done` (Tamamlandı), sürecin görevini başarıyla tamamladığını belirtir.
  • Farklı Bir Örnek Yapalım

    `pwd` komutu doğası gereği görevini hemen tamamlar ve çıkar. Ancak bazı komutlar siz bir durdurma sinyali gönderene kadar sürekli çalışır. `ping` komutu buna iyi bir örnektir.

    Ping komutu ile `127.0.0.1` adresine bir ping gönderelim ve bunu arka planda çalıştıralım. Bu, terminalimiz veya çalışan süreç açık kaldığı sürece `127.0.0.1`'e ping istekleri göndermemize izin verirken, terminalimizi diğer görevler için kullanmamıza da olanak tanıyacaktır.

    root@hackerbox:~$ ping 127.0.0.1 &
    

    [1] 54017
    root@hackerbox:~$ 
    64 bytes from 127.0.0.1: icmp_seq=100 ttl=64 time=0.081 ms
    64 bytes from 127.0.0.1: icmp_seq=101 ttl=64 time=0.164 ms
    64 bytes from 127.0.0.1: icmp_seq=102 ttl=64 time=0.075 ms
    

    *(Çıktı açıklaması): Terminal, arka planda çalışan ping işleminden gelen yanıtları göstermeye devam eder.*

  • `[1]`, sürecin arka plan iş numarasının 1 olduğunu belirtir.
  • `54017`, arka plan süreci için Süreç Kimliğidir (PID). PID, süreci tanımlayan benzersiz bir sayıdır.
  • `ping` gibi bazı komutlar, arka planda çalışırken bile terminale çıktı verebilir. Örnekte görüldüğü gibi, arka planda çalışmasına rağmen ping komutu her saniye terminale çıktı yazdırır. Ancak bu çıktı, diğer görevleri yapmamızı engellemez ve terminali kilitlemez.

    Geçerli Terminal Oturumunda Süreçleri Yönetme (Managing Processes in the Current Terminal Session)

    `jobs` komutunu kullanarak geçerli terminal oturumumuzda başlatılan arka plan süreçlerini kolayca listeleyebiliriz.

    root@hackerbox:~$ jobs
    

    [1] running ping 127.0.0.1
    

    Çıktıya göre, geçerli terminal oturumumuzda arka planda çalışan ve iş numarası 1 olan bir `ping 127.0.0.1` komutumuz var.

    Bu arka plan komutunu tekrar ön plana getirmek için `fg` (foreground - ön plan) komutunu kullanabiliriz. `fg` komutunun yanına `%` işaretiyle sürecin iş numarasını yazarız.

    root@hackerbox:~$ fg %1
    

    Gördüğümüz gibi süreç tekrar ön planda çalışıyor. Bunu nasıl durdururuz? Klavyedeki `CTRL+C` kısayoluna basarak terminalde çalışan bir programı kolayca durdurabiliriz.

    ^C
    

    Sistem Genelindeki Süreçleri Yönetme (Managing System-Wide Processes)

    Geçerli terminal oturumumuzdaki süreçlere ek olarak, sistem genelinde çalışan süreçler de vardır. Bunlar işletim sistemi, terminal, servis sağlayıcılar tarafından kullanılan süreçler veya arka planda sürekli çalışan programlar olabilir. `ps` komutunu kullanarak sistem genelindeki süreçleri görüntüleyebiliriz.

    root@hackerbox:~$ ps
    

      PID TTY          TIME CMD
       19 pts/1    00:00:00 sh
       24 pts/1    00:00:00 ps
    

    Örnekte görüldüğü gibi, sistem genelinde çalışan iki süreç vardır. Biri `sh` sürecini çalıştıran terminal, diğeri ise az önce çalıştırdığımız `ps` komutudur. Daha ayrıntılı bir çıktı için `ps` komutunun `-f` parametresini kullanabiliriz.

    root@hackerbox:~$ ps -f
    

    UID        PID  PPID  C STIME TTY          TIME CMD
    1001        19     1  0 07:20 pts/1    00:00:00 sh
    1001        25    19  0 08:04 pts/1    00:00:00 ps -f
    

    Komut çıktısındaki sütunların ayrıntılı açıklamaları şöyledir:

  • UID: Kullanıcı Kimliği - Süreci çalıştıran kullanıcının kimlik numarası
  • PID: Süreç Kimliği - Süreç için benzersiz tanımlayıcı
  • PPID: Üst Süreç Kimliği - Süreci başlatan üst sürecin (parent) benzersiz tanımlayıcısı
  • C: CPU - Sürecin CPU kullanımı
  • STIME: Başlangıç Zamanı - Sürecin başlama zamanı
  • TTY: Terminal Tipi - Sürecin çalıştığı terminalin tipi
  • TIME: Sürecin çalıştığı toplam süre
  • CMD: Komut - Süreci başlatan komut
  • Çalışan Bir Süreci Durdurma (Stopping a Running Process)

    Çalışan süreçleri durdurmak için, süreç ön planda çalışıyorsa klavyedeki `CTRL+C` kısayoluna kolayca basabiliriz. Eğer bir arka plan süreciyse, durdurmak için Süreç Kimliği (PID) numarasını bilmemiz gerekir.

    Önce süreçleri listeleyelim:

    root@hackerbox:~$ ps
    

    Yukarıdaki çıktıda `sh` süreci (19) için PID'ye sahibiz. Bu süreci durdurmak için `kill` komutunu kullanın.

    root@hackerbox:~$ kill 19
    

    Süreç yukarıdaki komutla sonlanmazsa, kesme (interrupt) sinyali `-9` ile onu zorla durdurabiliriz (SIGKILL).

    root@hackerbox:~$ kill -9 19