Süreçler
Süreç (Process)
Süreç (process) terimi, belleğe yüklenmiş ve işlemcide (CPU) yürütülmekte olan bir program olarak tanımlanmaktadır.
Süreçler, komut satırından çalıştırılan kısa süreli komut olabileceği gibi işletim sisteminin açık olduğu süre boyunca çalışan bir ağ servisi de olabilir.
PID numarası
Kullanıcıların ve işletim sisteminin süreçleri yönetebilmesi için her sürece ait bir süreç numarası (PID) vardır.
Süreçle ilgili yapılacak işlemler bu PID numarası üzerinden gerçekleştirilir.
Linux altında çalışan ilk süreç init olup PID numarası her zaman 1’dir. Init ilk süreç olduğu için kullanıcı tarafından başlatılan diğer süreçlerin aksine çekirdek tarafından
Süreçleri Yönetmekte Kullanılan Komutlar
ps
Çalışan süreçleri görüntülemeye yarar.
Komut herhangi bir parametre almadan çalıştırılırsa mevcut kabukta çalıştırılmış süreçleri verir.
cezmi@ubuntu:~$ ps
PID TTY TIME CMD 1969 pts/0 00:00:00 bash
Tüm süreçleri görüntüleme
Sistemdeki tüm süreçleri görüntülemek için ps aux komutu kullanılabilir.
cezmi@ubuntu:~$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.3 0.7 167552 7924 ? Ss 10:42 0:00 /sbin/init splash root 2 0.0 0.0 0 0 ? S 10:42 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 10:42 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 10:42 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I 10:42 0:00 [kworker/0:0-cgroup_destroy]
root 6 0.0 0.0 0 0 ? I< 10:42 0:00 [kworker/0:0H-events_highpri]
...
Bir kullanıcıya ait süreçleri görüntülemek
Bir kullanıcıya ait süreçleri görüntülemek için -u parametresi kullanılır.
cezmi@ubuntu:~$ ps -u cezmi PID TTY TIME CMD
1262 ? 00:00:00 systemd 1263 ? 00:00:00 (sd-pam) 1268 ? 00:00:00 pulseaudio
1271 ? 00:00:00 tracker-miner-f 1273 ? 00:00:00 gnome-keyring-d 1277 ? 00:00:00 dbus-daemon
Süreç numarasına göre bilgi almak
Süreç numarasına göre bilgi almak için -p parametresi kullanılır.
cezmi@ubuntu:~$ ps -p 1
PID TTY TIME CMD
1 ? 00:00:00 systemd
Süreç listesinde filtreleme yapmak
Eğer aradığımız özel bir süreç varsa daha önce görmüş olduğumuz grep komutu yardımı ile o süreç hakkında doğrudan bilgi alabiliriz. Örneğin; "bash" süreci hakkında bilgi almak istiyorsak konsola ps -aux | grep "bash" yazmak yeterli olacaktır.
cezmi@ubuntu:~$ ps -aux | grep "bash"
cezmi 1969 0.0 0.4 13356 4744 pts/0 Ss 10:44 0:00 bash
cezmi 2197 0.0 0.0 11792 716 pts/0 S+ 10:55 0:00 grep --color=auto bash
pstree
Süreçleri hiyerarşik bir biçimde görüntülemek için pstree komutu kullanılabilir.
cezmi@ubuntu:~$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─3*[VBoxClient───VBoxClient───2*[{VBoxClient}]]
├─VBoxClient───VBoxClient───3*[{VBoxClient}]
├─VBoxService───8*[{VBoxService}]
├─accounts-daemon───2*[{accounts-daemon}]
├─acpid
├─avahi-daemon───avahi-daemon ├─colord───2*[{colord}]
├─cron
├─cups-browsed───2*[{cups-browsed}]
├─cupsd───dbus ├─dbus-daemon
├─gdm3─┬─gdm-session-wor─┬─gdm-x-session─┬─Xorg───{Xorg}
│ │ │ ├─gnome-session-b─┬─ssh-agent
│ │ │ │ └─2*[{gnome-session-b}]
│ │ │ └─2*[{gdm-x-session}]
...
top
Süreçleri CPU kullanımına, bellek kullanımına ve çalışma süresine göre sıralar ve
sistem yöneticisinin kaynak kullanımını analiz etmesini sağlar. Aynı zamanda süreçleri düzenleyebilecek etkileşimli bir arayüz sunar. Varsayılan olarak 3 saniyede bir çıktı güncellenir.
top - 11:02:52 up 20 min, 1 user, load average: 0,13, 0,06, 0,10 Tasks: 180 total, 1 running, 179 sleeping, 0 stopped, 0 zombie
%Cpu(s): 11,9 us, 8,0 sy, 0,0 ni, 78,3 id, 1,4 wa, 0,0 hi, 0,3 si, 0,0 st MiB Mem : 971,5 total, 66,9 free, 618,5 used, 286,2 buff/cache
MiB Swap: 448,5 total, 313,3 free, 135,2 used. 207,2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
top komutu çıktısındaki alanların anlamı
Top çıktısında gösterilen bazı alanların açıklamaları:
İlk satır: Sistemin ne kadar süredir açık olduğunu gösteren uptime değeri(yukarıdaki çıktıda 20 dakika) ve son 1,5 ve 15 dakika içerisindeki CPU yükünü gösterir. Uptime komutuylaaynı sonucu verir.
Mem satırı: Toplam bellek, boş bellek ve kullanılan bellek miktarı gibi bellekle ilgili sayısal verileri içerir.
PID: Process ID (Süreç numarası) User: Sürecin sahibi kullanıcı
PRI: Sürecin önceliği
Time: Süreç başladığından beri tükettiği CPU zamanı
%CPU: Tüm süreçler içinde CPU zamanının % ne kadarını kullandığı
%MEM: Toplam süreçler içinde fiziksel belleği % ne kadar kullandığı
htop
htop, top benzeri çalışan süreçleri gösteren bir uygulamadır. Ubuntu'da kullanmak için önce kurmanız gerekmektedir.
sudo apt install htop
Htop arayüzü üç kısımdan oluşmaktadır:
Başlık kısmı: İşlemci, bellek ve Swap kullanımı gösteren barlar ve çalışan süreç sayısı, işlemci yük durumu ve sistemin ne kadar süredir açık olduğu gibi bilgileri içermektedir. Bu görüntü htop menüsünden değiştirilebilir.
Gövde kısmı: top’a benzer olarak süreçlerin işlemci kullanımına göre listelendiği kısımdır.
Alt kısım: Htop menüsünü ve kısayollarını gösterir.
nohup
nohup, "kapatmak yok" anlamına gelen bir komuttur. Verilecek komutları herhangi bir kesintiye uğramadan çalıştırmayı sağlar. Kullanıcı sistemden çıksa ve terminali kapatsa bile komut çalışmasına devam edecektir.
Genellikle çalışması çok uzun sürecek komutlarda kullanılır. Kullanımı;
nohup komut &
Süreci arka planda çalıştırma (& bg)
Bash kabuk altında çalışan bir süreç yarıda kesilebilir, arka plana gönderilebilir veya tekrar ön plana alınabilir.
Aşağıdaki gibi uzun sürecek bir görev arka plana gönderilebilir. Arka plana göndermek için komut sonuna & simgesi eklenir.
find / -ctime -1 > changed-files.txt &
Bir komutu çalıştırıp, bir süre izledikten sonra Ctrl-Z ile kesilip bg komutu verilerek de arka plana gönderilebilir.
cezmi@ubuntu:~$ wget http://www.google.com [1]+ Stopped wget http://www.google.com cezmi@ubuntu:~$ bg
[1]+ wget http://www.google.com &
Arka plana giden bir iş sonlandığında konsola aşağıdaki gibi mesaj verilir:
Arka planda çalışan süreçleri görme (jobs)
Arka plana gönderilmiş görevleri görmek için jobs komutu kullanılır:
cezmi@ubuntu:~$ jobs
[1] Running bash script.sh &
[2]- Running sample-soft &
[3]+ Done browser .
Arka plana atılmış süreci ön plana alma
Arka plandaki bir işi tekrar ön plana almak için fg komutu kullanılır. Hiçbir parametre verilmezse en son arka plana gönderilen komutu ön plana alır.
Aşağıdaki komutla 1 numaralı arka plan işi öne alınır:
fg %1
Sinyaller
Sinyaller, süreçler arasında bir iletişim yöntemidir. Sinyallerin
her birinin özel bir anlamı olup programın nasıl davranacağını belirlemede kullanılır.
Sık Kullanılan Sinyal Türleri:
Sinyal Değer Açıklama
SIGHUP 1 Sürecin durdur ve yapılandırma dosyasını yeniden yükle SIGINT 2 Klavyeden gelen kesme
SIGQUIT 3 Klavyeden gelen çıkış kesmesi SIGKILL 9 Süreci öldür
SIGTERM 15 Sonlandırma sinyali
kill
Süreçlere sinyal göndermek için kullanılır.
Varsayılan olarak SIGTERM sinyaliyle süreçlere, "Lütfen kendinizi kapatır mısınız?" diye ricada bulunur.
Aşağıdaki komut 1120 PID numaralı sürece 9 numaralı (SIGKILL) sinyali gönderir.
Bu bir rica değildir. Süreci anında öldürür.
killall
Kendisine parametre olarak verilen süreç adına sahip tüm süreçleri öldürmeye çalışır.
killall -9 süreç_adı
xkill
Bu komut yanıt vermeyen bir programı grafiksel arayüzden kapatmaya yarar.
Örneğin gedit isimli metin editörü programını açtınız. Gedit bir aşamada dondu ve size yanıt vermiyor. Bu noktada xkill komutunu çalıştırdığınızda fare imleci "x"
işaretine dönüşür. Bu "x" işareti ile tıkladığınız program (bu örnekte gedit) otomatik olarak kapanır.
Program Çıkış Kodları
Programlar, programcıların kodlarındaki exit fonksiyonlarıyla yada dışardan gelecek kesmelerle (interrupt) sonlanır.
Programlar sonlanırken 0-255 arası bir çıkış değeri ile sonlanırlar. Bu değer programın neden çıktığını göstermesi açısından önemlidir.
Genel olarak 0 ile çıkan programlar başarıyla görevini tamamlayarak, 1-255 arası bir rakamla çıkan programlar ise bir hata ile karşılaşarak sonlanmıştır demektir. Hangi kodun hangi anlam taşıdığı genel olarak programın dokümanında belirtilir.
Son çalışan komutun çıkış kodu
Bash kabuğunda son çalışan komutun çıkış değeri ? değişkeninde saklanır.
cezmi@ubuntu:~$ ls
Belgeler Genel İndirilenler Masaüstü Müzik Resimler Şablonlar Videolar cezmi@ubuntu:~$ echo $?
0
cezmi@ubuntu:~$ ls -al olmayan_dosya
ls: 'olmayan_dosya''e erişilemedi: Böyle bir dosya ya da dizin yok cezmi@ubuntu:~$ echo $?
Kaynaklar
https://linux-dersleri.github.io/docs/temel_linux/13.html
https://www.pardus.org.tr/kitaplar/LPI-Sertifikasyon-Kitabı-pardus.org.tr.pdf