LinuxNasıl yapılırSunucu

Linux Süreç (Process) Yönetimi: ps, kill ve nice ile Ustalaşma


Linux

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

Ubuntu şifre Sıfırlama Nasıl Yapılır? (2 Farklı Metot: Recovery Mode Ve Ubuntu CD Ile Başlatarak) | Narweb.net Blog

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir