8 - Süreçler
2026
Süreç (Process): İşletim sistemi tarafından çalıştırılmak üzere oluşturulan bir program örneğidir.
Bir süreç:
Program, disk üzerinde bulunan çalıştırılabilir kod ve verilerden oluşan pasif bir dosyadır.
Örnek:
Süreç ise bu programlardan birinin işletim sistemi tarafından çalıştırılmasıyla oluşan aktif çalışma örneğidir.
Aynı programdan aynı anda birden fazla süreç oluşturulabilir.
Aynı program birden fazla kez çalıştırılırsa, her çalışma için ayrı bir süreç oluşur.
Bu komutlardan sonra aynı sleep programına ait üç farklı süreç oluşur.
Her sürecin PID değeri farklıdır.
Bir süreç yalnızca çalıştırılan koddan oluşmaz. İşletim sistemi süreç için çeşitli bilgiler ve kaynaklar tutar.
pstree komutu ile görülebilir.Ubuntu 24.04 gibi systemd kullanan modern Linux dağıtımlarında ilk kullanıcı alanı süreci genellikle systemd sürecidir.
Bu süreç çoğunlukla PID 1 değerine sahiptir.
pspstreetop / htoppgrep / pidofkill / pkill / killall&, jobs, fg, bgnohupnice / renicesystemctljournalctl/procps - Süreçleri Görüntülemeps, çalışan süreçleri listelemek için kullanılır.
Parametresiz ps, yalnızca mevcut kabuk oturumundaki süreçleri gösterir.
Bu örnekte mevcut terminal oturumunda çalışan bash ve ps süreçleri görülmektedir.
ps - Detaylı Bilgi ve PPID-f seçeneği daha ayrıntılı çıktı üretir.
cezmi@ubuntu:~$ ps -f
UID PID PPID C STIME TTY TIME CMD
cezmi 1969 1960 0 10:44 pts/0 00:00:00 bash
cezmi 3105 1969 0 11:45 pts/0 00:00:00 ps -fBu çıktıda:
PID: Sürecin kendi numarasıdır.PPID: Süreci başlatan ebeveyn sürecin numarasıdır.CMD: Çalıştırılan komutu gösterir.Örnekte ps -f sürecinin ebeveyni bash sürecidir.
ps aux ve ps -efSistemdeki tüm süreçleri görmek için iki yaygın kullanım vardır.
BSD sözdizimi:
System V sözdizimi:
Bu iki kullanım benzer amaçla kullanılır; ancak çıktı biçimleri farklıdır.
ps aux çıktısında sık görülen sütunlar:
USER: Sürecin sahibi.PID: Süreç numarası.%CPU: CPU kullanımı.%MEM: Bellek kullanımı.STAT: Süreç durumu.COMMAND: Çalıştırılan komut.ps - Sadece İstenen Sütunları Göstermeps -o seçeneği ile çıktıda hangi sütunların yer alacağı belirlenebilir.
Bu komut, PID değeri 1 olan süreci seçilen sütunlarla gösterir.
Bu kullanım:
ps - Seçme, Sıralama ve FiltrelemeBelirli bir kullanıcının süreçlerini listelemek için:
Belirli bir PID değerini incelemek için:
CPU kullanımına göre sıralamak için:
Bellek kullanımına göre sıralamak için:
- işareti azalan sıralama anlamına gelir.
ps ve grep ile Filtrelemeps çıktısı grep ile filtrelenebilir.
cezmi@ubuntu:~$ ps aux | grep "ssh"
root 1010 0.0 0.1 10568 3456 ? Ss 10:43 0:00 /usr/sbin/sshd -D
cezmi 1515 0.0 0.3 15680 6144 ? Ss 10:44 0:00 /usr/bin/ssh-agent
cezmi 3502 0.0 0.0 6432 768 pts/0 S+ 11:55 0:00 grep --color=auto sshBurada grep komutunun kendisi de sonuçlarda görülebilir.
Bu nedenle PID bulmak için çoğu zaman pgrep daha temiz bir çözümdür.
pstree - Süreç Ağacıpstree, süreçleri ebeveyn-çocuk ilişkisine göre hiyerarşik biçimde gösterir.
Yaygın seçenekler:
-p: PID değerlerini de gösterir.-a: Komut satırı argümanlarını da gösterir.cezmi@ubuntu:~$ pstree -p | head -n 10
systemd(1)─┬─ModemManager(860)─┬─{ModemManager}(875)
│ └─{ModemManager}(876)
├─NetworkManager(870)─┬─{NetworkManager}(910)
│ └─{NetworkManager}(911)
├─accounts-daemon(880)─┬─{accounts-daemon}(905)
│ └─{accounts-daemon}(908)
├─acpid(881)
├─agetty(1110)
├─anacron(883)
├─atd(885)/proc Üzerinden Süreç BilgisiLinux’ta süreç bilgileri /proc sanal dosya sistemi üzerinden de incelenebilir.
Bazı önemli yollar:
/proc/<PID>/status: Sürecin temel durum bilgilerini gösterir./proc/<PID>/cmdline: Sürecin hangi komutla başlatıldığını gösterir./proc/<PID>/fd: Sürecin açık dosya tanıtıcılarını gösterir.$$: Mevcut kabuğun PID değeridir.ps, top ve benzeri araçlar süreç bilgilerini büyük ölçüde bu yapı üzerinden okuyabilir.
top - Dinamik Süreç Görüntüleyicitop, sistem kaynak kullanımını anlık olarak gösteren etkileşimli bir araçtır.
Genellikle şu bilgileri görmek için kullanılır:
Etkileşimli kısayollar:
k: Sürece sinyal gönderme.r: Sürecin nice değerini değiştirme.h: Yardım.q: Çıkış.top Komutunun Örnek Çıktısıtop - 12:05:10 up 1:23, 1 user, load average: 0.15, 0.10, 0.11
Tasks: 210 total, 1 running, 209 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.1 us, 1.0 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1985.7 total, 750.1 free, 820.6 used, 415.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 980.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1527 cezmi 20 0 3512400 345120 83500 S 5.0 17.4 2:10.55 gnome-shell
1319 cezmi 20 0 260100 36200 17100 S 2.5 1.8 0:45.30 Xorg
3650 cezmi 20 0 15000 3800 3100 R 1.0 0.2 0:00.05 toptop Çıktısı - Özet Alanıtop çıktısının üst kısmı sistemin genel durumunu gösterir.
top satırı: Saat, çalışma süresi, kullanıcı sayısı ve yük ortalamaları.Tasks: Toplam süreç sayısı ve durumlarına göre dağılım.%Cpu(s): CPU kullanımının dağılımı.MiB Mem: Fiziksel bellek kullanımı.MiB Swap: Takas alanı kullanımı.Örneğin:
running: Çalışan veya çalışmaya hazır süreç sayısı.sleeping: Bir olay bekleyen süreç sayısı.zombie: Sonlanmış fakat ebeveyni tarafından henüz toplanmamış süreç sayısı.load average, CPU kullanım yüzdesi değildir.
Bu değer, çalışmaya hazır olan veya kesilemeyen G/Ç beklemesinde bulunan süreçlerin ortalama sayısını gösterir.
Bu üç değer sırasıyla:
ortalama sistem yükünü gösterir.
Tek çekirdekli bir sistemde 1.00 yoğun bir sistemi gösterebilir. Dört çekirdekli bir sistemde ise 1.00 genellikle sorunlu değildir.
top Çıktısı - Süreç ListesiSüreç listesindeki yaygın sütunlar:
ps, top ve htop çıktılarında süreç durumu genellikle STAT veya S sütununda gösterilir.
R — Running / Runnable: Çalışıyor veya CPU sırası bekliyor.S — Interruptible Sleep: Bir olay bekliyor; sinyalle kesilebilir.D — Uninterruptible Sleep: Genellikle G/Ç bekler; sinyalle kolayca kesilemez.Z — Zombie: Süreç sonlanmış, fakat ebeveyni çıkış durumunu okumamıştır.T — Stopped: Sinyal ile durdurulmuştur.I — Idle: Genellikle çekirdek iş parçacıkları için görülür.En sık görülen durum çoğunlukla S durumudur.
Zombie süreç: Sonlanmış fakat ebeveyn süreci tarafından çıkış durumu henüz okunmamış süreçtir.
ps çıktısında bazen <defunct> olarak görülebilir.
Çok sayıda zombie süreç, ebeveyn süreçte bir sorun olduğuna işaret edebilir.
Orphan süreç: Ebeveyni sonlanan fakat kendisi çalışmaya devam eden süreçtir.
Bu tür süreçler genellikle PID 1 tarafından sahiplenilir. systemd, bu süreçler sonlandığında çıkış durumlarını okuyarak zombie olarak kalmalarını engeller.
İşletim sistemi CPU kaynağını süreçler arasında önceliklere göre paylaştırır.
Nice değeri aralığı:
-20: En yüksek öncelik.0: Varsayılan değer.+19: En düşük öncelik.Düşük NI değerine sahip süreçler CPU üzerinde daha yüksek öncelik elde edebilir.
nice ve reniceBir komutu belirli nice değeriyle başlatmak için:
Çalışan bir sürecin nice değerini değiştirmek için:
Daha yüksek öncelik vermek için negatif nice değeri gerekir. Bu işlem genellikle yönetici yetkisi ister.
nice ve renice, özellikle CPU yoğun işlemlerin sistem üzerindeki etkisini azaltmak için kullanılır.
htop - Gelişmiş Süreç Görüntüleyicihtop, top komutuna göre daha görsel ve etkileşimli bir süreç izleme aracıdır.
Kurulum:
htop ile:
top ve htop Karşılaştırması| Özellik | top |
htop |
|---|---|---|
| Varsayılan kurulum | Genellikle vardır | Genellikle ayrıca kurulur |
| Görünüm | Metin tabanlı | Daha görsel |
| Kaydırma | Sınırlı | Dikey ve yatay |
| Fare desteği | Yok veya sınırlı | Var |
| Süreç öldürme | k |
F9 |
| Nice değiştirme | r |
F7 / F8 |
| Ağaç görünümü | Yok | F5 veya t |
pgrep ve pidofSüreçleri adlarına veya komut satırı içeriklerine göre bulmak için pgrep ve pidof kullanılabilir.
pgrep, ada göre süreç arar.
Komut satırının tamamında arama yapmak için -f kullanılabilir.
pidof, belirli bir komut adına ait süreçlerin PID değerlerini listeler.
pgrep -a, PID ile birlikte komut satırını da gösterir.
Sinyaller, süreçlere gönderilen basit kontrol ve bildirim mekanizmalarıdır.
Bir sinyal:
Sinyaller kullanıcıdan, başka bir süreçten veya işletim sisteminden gelebilir.
Örneğin Ctrl+C, çalışan sürece SIGINT sinyali gönderir.
| Sinyal | No | Anlamı | Örnek |
|---|---|---|---|
SIGHUP |
1 | Terminal bağlantısı kesildi / yapılandırmayı yeniden oku | kill -1 |
SIGINT |
2 | Kesme isteği | Ctrl+C |
SIGQUIT |
3 | Çıkış isteği | Ctrl+\ |
SIGKILL |
9 | Koşulsuz sonlandırma | kill -9 |
SIGTERM |
15 | Normal sonlandırma isteği | kill |
SIGSTOP |
19 | Koşulsuz durdurma | kill -19 |
SIGTSTP |
20 | Terminalden durdurma | Ctrl+Z |
SIGCONT |
18 | Devam ettirme | fg, bg, kill -18 |
SIGKILL ve SIGSTOP süreç tarafından yakalanamaz veya yok sayılamaz.
killkill, belirtilen PID değerine sahip sürece sinyal gönderir.
Varsayılan sinyal SIGTERM sinyalidir.
Bu komut, sürece normal şekilde sonlanması için istek gönderir.
Belirli bir sinyal göndermek için:
Zorla sonlandırma için:
kill -9, sürece düzgün kapanma fırsatı vermez. Bu nedenle ilk tercih olarak kullanılmamalıdır.
pkill ve killallpkill, süreçleri ada veya desene göre bulur ve sinyal gönderir.
killall, belirtilen komut adına sahip süreçlere sinyal gönderir.
Dikkat edilmesi gereken nokta:
pkill, desen eşleştirme yaptığı için beklenenden fazla süreci etkileyebilir.killall, aynı ada sahip tüm süreçleri etkileyebilir.pgrep -a ile hangi süreçlerin eşleştiğini görmek daha güvenlidir.Bir süreci kapatırken doğrudan kill -9 kullanmak yerine şu sıra tercih edilir:
kill -9 Neden Son Çare Olmalı?SIGKILL, süreci anında sonlandırır. Süreç bu sinyali yakalayamaz, erteleyemez veya yok sayamaz.
Bu nedenle program bazı işlemleri tamamlayamadan kapanabilir:
Bu yüzden önce SIGTERM ile normal kapanma istenir. SIGKILL, süreç yanıt vermediğinde son seçenek olarak kullanılır.
&Bir komutun sonuna & eklenirse komut arka planda başlatılır.
Kabuk iki bilgi verir:
[1]: İş numarasıdır.5120: Sürecin PID değeridir.Komut arka planda çalışırken terminal başka komutlar için kullanılabilir.
Uzun sürebilecek bir arama işlemi arka planda başlatılabilir.
Bu örnekte yalnızca dosyalar listelenir; silme işlemi yapılmaz.
Arka plan süreçlerini incelerken riskli komutlardan kaçınmak daha güvenlidir.
Ctrl+ZÖn planda çalışan bir süreç Ctrl+Z ile durdurulabilir.
Bu işlem süreci sonlandırmaz; yalnızca beklemeye alır.
Bu durumda süreç Stopped durumundadır.
Terminal tekrar komut almaya başlar.
bgDurdurulmuş bir işi arka planda devam ettirmek için bg kullanılır.
İş numarası belirtilmezse genellikle son durdurulan iş devam ettirilir.
Bu işlem, sürece SIGCONT sinyali gönderir.
jobsjobs, mevcut kabuk oturumundaki arka plan ve durdurulmuş işleri listeler.
İşaretlerin anlamı:
+: Son kullanılan iş.-: Bir önceki iş.jobs, yalnızca mevcut kabuk oturumunun işlerini gösterir. Sistemdeki tüm süreçleri göstermez.
fgfg, arka plandaki veya durdurulmuş bir işi tekrar ön plana alır.
İş numarası verilmezse + ile işaretli son iş ön plana alınır.
Ön plana alınan süreç terminal kontrolünü tekrar devralır.
Örneğin ön plana alınan bir vim sürecinde klavye girişi yeniden programa gider.
nohup - Oturum Kapansa Bile Çalıştırmanohup, komutun SIGHUP sinyalini yok saymasını sağlar.
Bu yöntem, uzun süren işlemlerin terminal kapansa bile çalışmaya devam etmesi için kullanılabilir.
Bu komutta:
nohup: Terminal kapanınca gelen SIGHUP sinyalini yok saydırır.> betik.log: Standart çıktıyı dosyaya yazar.2>&1: Hata çıktısını da aynı dosyaya yönlendirir.&: Komutu arka planda başlatır.Çıktı yönlendirilmezse, çıktı genellikle nohup.out dosyasına yazılır.
Grafik arayüzde yanıt vermeyen bir uygulama olduğunda önce masaüstü ortamının kendi kapatma araçları tercih edilebilir.
Komut satırından işlem yapılacaksa uygulama adına göre süreç bulunup kapatılabilir.
Eski X11 oturumlarında xkill aracı da görülebilir.
Ancak Wayland tabanlı modern masaüstü oturumlarında xkill her zaman beklenen şekilde çalışmayabilir. Bu nedenle temel süreç yönetimi için pgrep, pkill, kill ve sistem izleme araçlarını bilmek daha önemlidir.
systemd Nedir?Linux sistemlerinde bazı programlar kullanıcı doğrudan başlatmasa da arka planda sürekli veya gerektiğinde çalışır.
Bu tür arka plan hizmetlerine genellikle servis denir.
Örnekler:
ssh.service: SSH bağlantılarını kabul eder.NetworkManager.service: Ağ bağlantılarını yönetir.cron.service: Zamanlanmış görevleri çalıştırır.apache2.service veya nginx.service: Web sunucusu hizmeti verir.Ubuntu 24.04 gibi modern Linux dağıtımlarında bu servislerin önemli bir bölümü systemd tarafından yönetilir.
systemd Ne Yapar?systemd, Linux sistemlerinde servisleri ve sistem açılış sürecini yöneten temel bileşenlerden biridir.
Genel olarak:
Bu nedenle servis yönetiminde çoğu zaman systemctl ve journalctl komutları birlikte kullanılır.
systemctl ile Servis Yönetimisystemd tarafından yönetilen servisler systemctl komutu ile kontrol edilir.
Bir servisin durumunu görmek için:
Yaygın servis işlemleri:
sudo systemctl start ssh.service
sudo systemctl stop ssh.service
sudo systemctl restart ssh.service
sudo systemctl reload ssh.serviceAnlamları:
start: Servisi başlatır.stop: Servisi durdurur.restart: Servisi durdurup yeniden başlatır.reload: Destekleniyorsa yapılandırmayı yeniden okutur.start ve enable Farkıstart, servisi şu anda başlatır.
enable, servisin sistem açılışında otomatik başlamasını sağlar.
Bu iki işlem aynı şey değildir.
Bir servisi hem hemen başlatmak hem de sonraki sistem açılışlarında otomatik çalıştırmak için şu komut kullanılabilir:
disable ve stop Farkıstop, çalışan servisi şu anda durdurur.
disable, servisin sistem açılışında otomatik başlamasını engeller.
Bu iki işlem de aynı şey değildir.
Bir servis şu anda çalışıyor olabilir ama açılışta otomatik başlamayacak şekilde ayarlanmış olabilir.
Benzer şekilde, bir servis açılışta otomatik başlayacak şekilde etkinleştirilmiş olabilir ama o anda çalışmıyor olabilir.
restart ve reload Farkırestart, servisi tamamen durdurup yeniden başlatır.
Bu işlem sırasında servis kısa süreliğine kesilebilir.
reload, servis destekliyorsa yapılandırma dosyalarını yeniden okutur.
reload sırasında servis genellikle çalışmaya devam eder. Ancak her servis reload desteklemez.
Genel kullanım:
reload destekliyorsa önce reload denenir.restart kullanılır.Bir servisin çalışıp çalışmadığını görmek için:
Servisin yalnızca aktif olup olmadığını kontrol etmek için:
Servisin sistem açılışında otomatik başlayıp başlamadığını görmek için:
Bu komutlar özellikle servis sorunlarını incelerken birlikte kullanılabilir.
journalctl ile Servis Günlüklerini İncelemeBir servis çalışmadığında yalnızca systemctl status çıktısı yeterli olmayabilir.
Servis günlüklerini görmek için journalctl kullanılır.
Günlükleri canlı takip etmek için:
Son açılıştan sonraki kayıtları görmek için:
Bu komutlar, servislerin neden başlamadığını veya neden hata verdiğini anlamak için kullanılır.
Bir servis beklenen şekilde çalışmıyorsa şu sıra izlenebilir:
reload dene:Bir komut veya program sonlandığında işletim sistemine bir çıkış kodu bildirir.
Çıkış kodları genellikle 0 ile 255 arasındadır.
0: Başarılı tamamlanma.1-255: Hata veya özel durum.Bash kabuğunda son çalıştırılan komutun çıkış kodu $? değişkeninde tutulur.
Çıktı:
Var olmayan bir dosya sorgulanırsa komut hata ile sonlanır.
Örnek çıktı:
Betiklerde çıkış kodu kontrol edilebilir.
if cp dosya1.txt yedek/; then
echo "Kopyalama başarılı."
else
echo "Kopyalama başarısız! Çıkış kodu: $?"
fiÇıkış kodları, kabuk betiklerinde karar vermek için temel mekanizmalardan biridir.
lsof ve straceSüreçlerle ilgili daha ayrıntılı incelemelerde farklı araçlar da kullanılır.
lsof, süreçlerin açtığı dosyaları, soketleri ve benzeri kaynakları gösterebilir.
strace, bir sürecin yaptığı sistem çağrılarını izlemek için kullanılır.
Bu araçlar bu dersin temel kapsamı dışında kalır; ancak hata ayıklama ve sistem inceleme sırasında sık kullanılır.
| Durum | Kullanılabilecek Komut |
|---|---|
| Çalışan süreçleri görmek | ps, top, htop |
| Süreç ağacını görmek | pstree |
| Bir sürecin PID değerini bulmak | pgrep, pidof, ps aux \| grep |
| Belirli bir PID değerini incelemek | ps -p <PID> -f |
| En çok CPU kullanan süreçleri bulmak | ps aux --sort=-%cpu, top |
| En çok bellek kullanan süreçleri bulmak | ps aux --sort=-%mem, top |
| Süreç bilgilerini dosya sistemi üzerinden görmek | /proc/<PID> |
| Açık dosyaları incelemek | lsof -p <PID> |
| Sistem çağrılarını izlemek | strace -p <PID> |
| Durum | Kullanılabilecek Komut |
|---|---|
| Süreci normal kapatmak | kill <PID> |
| Ada göre süreç kapatmak | pkill, killall |
| Yanıt vermeyen süreci son çare olarak kapatmak | kill -9 <PID> |
| Ön plandaki işi durdurmak | Ctrl+Z |
| Durdurulan işi arka planda sürdürmek | bg |
| Arka plan işlerini görmek | jobs |
| Arka plandaki işi ön plana almak | fg |
| Terminal kapansa bile çalıştırmak | nohup komut & |
| Durum | Kullanılabilecek Komut |
|---|---|
| Servis durumunu görmek | systemctl status <servis> |
| Servisi hemen başlatmak | systemctl start <servis> |
| Servisi hemen durdurmak | systemctl stop <servis> |
| Servisi açılışta otomatik başlatmak | systemctl enable <servis> |
| Otomatik başlatmayı kapatmak | systemctl disable <servis> |
| Yapılandırmayı yeniden okutmak | systemctl reload <servis> |
| Servisi yeniden başlatmak | systemctl restart <servis> |
| Servis günlüklerini incelemek | journalctl -u <servis> |
Bu derste süreçlerin yalnızca “çalışan program” olarak düşünülmemesi gerektiğini gördük.
Bir süreci incelerken PID ve PPID ilişkisine, süreç durumuna, CPU ve bellek kullanımına, aldığı sinyallere ve bağlı olduğu kaynaklara bakarız.
Servis tarafında ise aynı süreç mantığı devam eder; ancak servisler sistem tarafından daha düzenli biçimde başlatılır, durdurulur, izlenir ve günlük kayıtlarıyla takip edilir.
Bu nedenle süreç ve servis yönetimi, Linux sistemlerinde sorun giderme ve temel sistem yöneticiliği için birlikte düşünülmesi gereken iki konudur.