Linux Süreç (Process) Yönetimi: ps, kill ve nice ile Ustalaşma
Table of Contents
Linux Süreç (Process) Yönetimi
Bir Linux sunucusu, diğer tüm modern bilgisayarlar gibi, birden çok uygulama çalıştırır. Bunlara bireysel süreçler olarak atıfta bulunulur ve yönetilir.
Linux, bir sürecin yaşam döngüsündeki düşük seviyeli, perde arkası yönetimi – yani başlangıç, kapanış, bellek tahsisi vb. – ile ilgilenecektir, ancak onları daha yüksek bir seviyeden yönetmek için işletim sistemiyle etkileşimde bulunmanız için bir yolunuz olmalıdır.
Bu rehberde, süreç yönetiminin bazı temel yönlerini öğreneceksiniz. Bu amaçla Linux, standart, yerleşik bir dizi araç sunar.
Bu fikirleri Ubuntu 20.04 ortamında keşfedeceksiniz, ancak her modern Linux dağıtımı benzer bir şekilde çalışacaktır.
Adım 1 – Linux’ta Çalışan Süreçleri Nasıl Görüntülenir
Sunucunuzda çalışan tüm süreçleri top
komutuyla görebilirsiniz:
top - 15:14:40 up 46 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1019600k total, 316576k used, 703024k free, 7652k buffers
Swap: 0k total, 0k used, 0k free, 258976k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0
8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
İlk birkaç çıktı satırı, CPU/bellek yükü ve çalışan görevlerin toplam sayısı gibi sistem istatistiklerini sağlar.
1 çalışan süreç olduğunu ve CPU döngülerini aktif olarak kullanmadıkları için 55 sürecin uyuma(sleeping) olarak kabul edildiğini görebilirsiniz.
Gösterilen çıktının geri kalanı çalışan süreçleri ve kullanım istatistiklerini gösterir. Varsayılan olarak, top
bunları CPU kullanımına göre otomatik olarak sıralar, böylece en yoğun süreçleri önce görebilirsiniz. top
, onu durdurana kadar kabuğunuzda çalışmaya devam eder. Bu, çalışan bir süreci çıkmak için standart tuş kombinasyonu olan Ctrl+C kullanarak yapılır. Bu, sürecin mümkünse zarif bir şekilde durmasını söyleyen bir öldürme sinyali gönderir.
top
‘un geliştirilmiş bir sürümü olan htop
, çoğu paket deposunda mevcuttur. Ubuntu 20.04’te bunu apt
ile yükleyebilirsiniz.
Daha sonra htop
komutu kullanılabilir hale gelir:
Mem[||||||||||| 49/995MB] Load average: 0.00 0.03 0.05
CPU[ 0.0%] Tasks: 21, 3 thr; 1 running
Swp[ 0/0MB] Uptime: 00:58:11
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
1259 root 20 0 25660 1880 1368 R 0.0 0.2 0:00.06 htop
1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 /sbin/init
311 root 20 0 17224 636 440 S 0.0 0.1 0:00.07 upstart-udev-brid
314 root 20 0 21592 1280 760 S 0.0 0.1 0:00.06 /sbin/udevd --dae
389 messagebu 20 0 23808 688 444 S 0.0 0.1 0:00.01 dbus-daemon --sys
407 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.02 rsyslogd -c5
408 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5
409 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.00 rsyslogd -c5
406 syslog 20 0 243M 1404 1080 S 0.0 0.1 0:00.04 rsyslogd -c5
553 root 20 0 15180 400 204 S 0.0 0.0 0:00.01 upstart-socket-br
htop
, modern terminallerde renk desteğinin daha iyi farkındalığı, daha fazla sıralama seçeneği ve diğer özellikler arasında birden çok CPU iş parçacığının daha iyi görselleştirilmesini sağlar. top
‘un aksine, her zaman varsayılan olarak yüklenmez, ancak yerine bırakma olarak kabul edilebilir. top
ile olduğu gibi htop
‘u Ctrl+C’ye basarak çıkabilirsiniz. top
ve htop
‘u nasıl kullanacağınızı öğrenmek için daha fazla bilgi edinebilirsiniz.
Bir sonraki bölümde, belirli süreçleri sorgulamak için hangi araçları kullanabileceğinizi öğreneceksiniz.
Adım 2 – ps’yi Süreçleri Listelemek İçin Nasıl Kullanılır
top
ve htop
, bir grafik görev yöneticisine benzer bir şekilde çalışan süreçleri görüntülemek için bir gösterge paneli arayüzü sağlar. Bir gösterge paneli arayüzü genel bir bakış sağlayabilir, ancak genellikle doğrudan eyleme geçirilebilir bir çıktı döndürmez. Bunun için, Linux çalışan süreçleri sorgulamak için başka bir standart komut olan ps
‘yi sağlar.
ps
‘yi herhangi bir argüman olmadan çalıştırmak çok az bilgi sağlar:
Output PID TTY TIME CMD
1017 pts/0 00:00:00 bash
1262 pts/0 00:00:00 ps
Bu çıktı, şu anda bu terminalde sadece bash kabuğunu ve bu ps
komutunu çalıştırıyorsanız, mevcut kullanıcı ve terminal oturumuyla ilişkilendirilen tüm süreçleri gösterir.
Bu sistemin süreçlerinin daha tam bir resmini almak için ps aux
komutunu çalıştırabilirsiniz:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 24188 2120 ? Ss 14:28 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S 14:28 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:28 0:00 [ksoftirqd/0]
root 6 0.0 0.0 0 0 ? S 14:28 0:00 [migration/0]
root 7 0.0 0.0 0 0 ? S 14:28 0:00 [watchdog/0]
root 8 0.0 0.0 0 0 ? S< 14:28 0:00 [cpuset]
root 9 0.0 0.0 0 0 ? S< 14:28 0:00 [khelper]
Bu seçenekler, ps
‘ye tüm kullanıcıların süreçlerini göstermesini (terminal ilişkilendirmelerinden bağımsız olarak) daha insan dostu bir formatta göstermesini söyler.
Boru kullanarak, ps aux
çıktısının içinde grep
kullanarak belirli bir sürecin adını döndürebilirsiniz. Bu, çöktüğüne inanıyorsanız veya bir nedenle durdurmanız gerekiyorsa yararlıdır.
ps aux | grep bash
Bu, şu anda çalışan bash
kabuğunu ve toplam bellek ve CPU kullanımını, ne kadar süre çalıştığını ve yukarıda vurgulanan çıktıda süreç kimliğini döndürür. Linux ve Unix benzeri sistemlerde, her sürece bir süreç kimliği veya PID atanır. İşletim sisteminin süreçleri tanımlaması ve takip etmesi için bu şekildedir.
Bir sürecin PID’sini almanın hızlı bir yolu, pgrep
komutuyla yapılır:
pgrep bash
Önyükleme sırasında başlatılan ilk süreç olan init
, “1” PID’sine verilir.
pgrep init
Bu süreç, sistemdeki diğer tüm süreçleri başlatmak için sorumludur. Daha sonraki süreçlere daha büyük PID numaraları verilir.
Bir sürecin ebeveyni, onu başlatan süreçtir. Ebeveyn süreçlerin bir PPID’si vardır, bu, birçok süreç yönetimi uygulamasında, top
, htop
ve ps
dahil olmak üzere sütun başlıklarında görebilirsiniz.
Kullanıcı ile işletim sistemi arasındaki her türlü iletişim, işlem sırasında süreç adları ve PID’leri arasında çeviri yapmayı içerir. Bu nedenle bu yardımcı programlar, çıktılarında her zaman PID’yi içerecektir. Bir sonraki bölümde, çalışan süreçlere durdurma, devam etme veya diğer sinyaller göndermek için PID’leri nasıl kullanacağınızı öğreneceksiniz.
Adım 3 – Linux’ta Süreçlere Sinyal Gönderme
Linux’taki tüm süreçler sinyallere yanıt verir. Sinyaller, programlara sonlandırmalarını veya davranışlarını değiştirmelerini söylemek için bir işletim sistemi seviyesi yoludur.
Bir programa sinyal geçirmenin en yaygın yolu kill
komutuyla yapılır. Tahmin edebileceğiniz gibi, bu yardımcı programın varsayılan işlevselliği bir süreci öldürmeye çalışmaktır:
kill PID_of_target_process
Bu, sürece TERM sinyalini gönderir. TERM sinyali, sürecin lütfen sonlandırmasını söyler. Bu, programın temizleme işlemlerini gerçekleştirmesine ve düzgün bir şekilde çıkmasına olanak tanır.
Programın yanıt vermediği ve TERM sinyali verildiğinde çıkmadığı durumlarda, KILL sinyali vererek sinyali artırabilirsiniz:
kill -KILL PID_of_target_process
Bu, programın kendisine gönderilmediği özel bir sinyaldir.
Bunun yerine, işletim sistemi çekirdeğine verilir, bu da süreci kapatır. Bu, kendilerine gönderilen sinyalleri yoksayacak programları atlatmak için kullanılır.
Her sinyalin, adı yerine geçirilebilecek ilişkilendirilmiş bir numarası vardır. Örneğin, “-TERM” yerine “-15” geçirebilir ve “-KILL” yerine “-9” geçirebilirsiniz.
Sinyaller sadece programları kapatmak için kullanılmaz. Diğer eylemleri gerçekleştirmek için de kullanılabilirler.
Örneğin, sürekli olarak arka planda çalışması için tasarlanmış birçok süreç (bazen “daemon” olarak adlandırılır), HUP veya kopma sinyali verildiğinde otomatik olarak yeniden başlatılır. Apache web sunucusu tipik olarak bu şekilde çalışır.
sudo kill -HUP pid_of_apache
Yukarıdaki komut, Apache’nin yapılandırma dosyasını yeniden yüklemesine ve içerik sunmaya devam etmesine neden olacaktır.
Not: Bu tür birçok arka plan süreci, onlarla etkileşimde bulunmak için ek bir yüzey sağlayan sistem hizmetleri aracılığıyla yönetilir ve genellikle bir HUP sinyali doğrudan çalışan bir sürece göndermekten ziyade hizmetin kendisini yeniden başlatmak daha uygundur. Çeşitli hizmetlerin yapılandırma dosyalarını incelediğinizde, çeşitli hizmet yeniden başlatma kancalarının tam olarak bunu yapmak için tasarlandığını – belirli süreçlere sinyaller göndermek – aynı zamanda günlükler ve diğer raporlamaları sağlarken bulabilirsiniz.
kill
ile gönderilebilecek tüm sinyalleri -l
bayrağıyla listeleyebilirsiniz:
Output
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
Sinyalleri göndermenin geleneksel yolu PID’leri kullanmak olsa da, bu işlemi düzenli süreç adlarıyla yapmanın da yöntemleri vardır.
pkill
komutu, kill
ile neredeyse tam olarak aynı şekilde çalışır, ancak bir süreç adı üzerinde çalışır:
pkill -9 ping
Yukarıdaki komut şunun eşdeğeridir:
kill -9 `pgrep ping`
Belirli bir sürecin her örneğine bir sinyal göndermek isterseniz, killall
komutunu kullanabilirsiniz:
killall firefox
Yukarıdaki komut, bilgisayarda çalışan firefox’un her örneğine TERM sinyalini gönderir.
Adım 4 – Süreç Önceliklerini Nasıl Ayarlanır
Çoğu zaman, bir sunucu ortamında hangi süreçlerin öncelikli olduğunu ayarlamak istersiniz.
Bazı süreçler, durumunuz için kritik öneme sahip olarak kabul edilebilirken, diğerleri kaynak kaldığında yürütülebilir.
Linux, önceliği niceness adında bir değerle kontrol eder.
Yüksek öncelikli görevler, kaynakları iyi paylaşmadıkları için daha az nice olarak kabul edilir. Diğer yandan, düşük öncelikli süreçler, sadece minimal kaynakları almayı ısrar ettikleri için nice tir.
Makale başında top
‘u çalıştırdığınızda, “NI” olarak işaretlenmiş bir sütun vardı. Bu, sürecin nice değeridir:
Tasks: 56 total, 1 running, 55 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1019600k total, 324496k used, 695104k free, 8512k buffers
Swap: 0k total, 0k used, 0k free, 264812k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1635 root 20 0 17300 1200 920 R 0.3 0.1 0:00.01 top
1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0
Nice değerler, sistemine bağlı olarak -19/-20 (en yüksek öncelik) ile 19/20 (en düşük öncelik) arasında değişebilir.
Belirli bir nice değeriyle bir programı çalıştırmak için nice
komutunu kullanabilirsiniz:
nice -n 15 command_to_execute
Bu, sadece yeni bir program başlatırken çalışır.
Zaten çalışan bir programın nice
değerini değiştirmek için renice
komutunu kullanabilirsiniz:
renice 0 PID_to_prioritize
Bu, belirli bir PID’ye sahip sürecin nice değerini değiştirir.
Sonuç
Bu rehberde, Linux’ta süreçleri nasıl yöneteceğinizi öğrendiniz. Bu, bir sunucunun sağlıklı ve verimli çalışmasını sağlamak için önemlidir. Şimdi, bu bilgileri kullanarak sunucunuzu daha etkili bir şekilde yönetebilirsiniz.
Ayrıca sitemizde daha önce Docker konusu ile ilgili yazılmış bu yazılar da ilginizi çekebilir:
Docker Nedir? Ve NARWEB’den Aldığım Sunucuma Nasıl Kurabilirim? | Narweb.net Blog
Heroku Alternatifi PaaS Çözümü “Dokku” Nedir, Nasıl Kurulur Ve Nasıl Kullanılır? | Narweb.net Blog
Basit Bir Şekilde Kubernetes Cluster Oluşturma Rehberi | Narweb.net Blog
Portainer Nedir Ve Nasıl Kurulur? Docker Yönetimini Kolaylaştıran Arayüz | Narweb.net Blog
Web hosting ihtiyaçlarınız için Narweb web hosting paketlerine göz atabilirsiniz: Linux Hosting | Uygun Fiyat ve Yüksek Hızlı Enterprise SSD Hosting | Narweb
Sunucu ihtiyaçlarınız için Narweb VDS paketlerimize göz atabilirsiniz: VDS Sunucu | Enterprise SSD Dedicated Sanal Sunucu Yüksek Performans | Narweb
Ayrıca sitemizde daha önce yayınladığımız bu yazılar da dikkatinizi çekebilir:
Ubuntu Linux: Kapsamlı Bir Giriş | Narweb.net Blog
Ubuntu 20.04 Sunucu Kurulduktan Sonra Ilk Yapılması Gerekenler | Narweb.net Blog
Ubuntu 20.04 üzerine Plesk Hosting Kontrol Paneli Kurulumu Nasıl Yapılır? | Narweb.net Blog
En Çok Kullanılan 20 Linux Komutu Ve örnekleri | Narweb.net Blog
Ubuntu 20.04’te SSH Keys (Anahtarları) Nasıl Oluşturulur Ve Kullanılır? | Narweb.net Blog
SSH Temelleri: SSH Sunucuları, İstemcileri Ve Anahtarlarla Çalışma | Narweb.net Blog