Linux Processes ve Jobs İşlemleri (bg, fg, jobs, kill, ps, pstree, top)

Öncelikle terminal ekranında bir komut veya program çalıştırdığımızda bu bir process ya da jobs olarak çalışmaya başlar.

Arkaplanda komut çalıştırma işlemlerine başlamadan arkaplanda iş yaptırmak için kullanacağımız programı tanıtayım.

$ sleep 10

Sleep komutu belirtilen süre kadar bekler. Bu komutu seçmemizin sebebi arkaplan işlemlerini yaparken aktif bir processe ihtiyaç duymamız.

Yukarıdaki komut 10 saniye bekleyecek ve sonra sonlanacak.

İşlemi Arkaplanda Çalıştırmak (&)

Komutu çalıştırırken yapılacak işlemin arkaplanda çalışmasını istiyorsak komutu verirken komutun sonuna & ekleyerek işlemin arkaplandan çalışmasını sağlayabiliriz.

$ sleep 200 &
[1] 4594

Yukarıdaki örnekte görüldüğü gibi komutumuz direk arkaplana atıldı ve ekrana hangi pid değeriyle arkaplanda çalıştığını yazdırdı. Burda sleep komutumuz 4594 pid değeriyle çalışmaya başlamış.

Arkaplandaki İşlemleri Görüntülemek (jobs, ps)

Arkaplanda çalıştırılan işlemleri jobs komutu ile listeleyebiliriz.

$ jobs
[1]+  Çalışıyor           sleep 200 &

Aynı zamanda ps komutu ile bulunduğumuz terminalde çalışan işlemleri listeleyebiliriz.

$ ps
  PID TTY          TIME CMD
 4570 pts/0    00:00:00 bash
 5135 pts/0    00:00:00 sleep
 5136 pts/0    00:00:00 ps

Yukarıdaki listede bulunduğumuz terminalde çalışan processlerin listesi yer alıyor. Aynı zamanda sleep komutumuzunda arkaplanda bulunduğumuz terminal üzerinde çalıştığını görebiliriz.

Çalıştırılmakta Olan İşlemi Arkaplana Atmak (Ctrl + z)

İşlemi arkaplanda çalıştırmayı unuttuk ve işlem beklenenden uzun sürecek gibi bu durumda bulunduğumuz işlemdeyken ctrl + z kombinasyonuna basarak. Aktif işlemi durdurabiliriz. İşlem durdurulduğunda arkaplanda işlem tekrar başlatılmayı bekler.

$ sleep 200
^Z
[1]+  Durdu                   sleep 200

$ jobs
[1]+  Durdu                   sleep 200

^Z satırı Ctrl + z tuşuna basıldığını temsil ediyor.

Aktif işlemi durdukduk ve işlem devam ettirilmek üzerek arkaplanda beklemeye alındı.

Durdurulmuş İşlemi(process) Arkaplanda Çalıştırmak (bg komutu)

İşlemimizi başlattık ve daha sonra ctrl + z kombinasyonu ile durdurduk ve arkaplanda işlem çalıştırılmayı bekliyor.

$ sleep 20
^Z
[1]+  Durdu                   sleep 20

$ jobs
[1]+  Durdu                   sleep 20

$ bg
[1]+ sleep 20 &

$ jobs
[1]+  Çalışıyor           sleep 20 &

bg komutu ile durdurulmuş ve arkaplanda çalıştırılmayı bekleyen son processi arkaplanda çalıştırır. Yani durdurulmuş işlemin sonuna & ekleyerek işlemi arkaplanda çalıştırır.


Arkaplana birden fazla işem attık ve çalıştırılmayı bekliyorlar. Normalde bg komutu bu jobs listesindeki en son işlemi arkaplanda çalışır hale getirecektir. Ancak listeden istediğimiz işlemi belirterek istediğimiz processin çalışmasını sağlayabiliriz.

$ jobs
[1]   Durdu                   sleep 100
[2]   Durdu                   sleep 200
[3]-  Durdu                   sleep 300
[4]+  Durdu                   sleep 400

Arkaplanda çalıştırılmayı bekleyen işlem listemiz yukarıdaki gibi olsun. Burda + işareti ile belirtilen işlem son aktif işlemi temsil eder. Eğer bg komutuna işlem belirtmeden kullanırsak + işaretinin olduğu process çalışacaktır.

$ bg
[4]+ sleep 400 &

$ jobs
[1]   Durdu                   sleep 100
[2]-  Durdu                   sleep 200
[3]+  Durdu                   sleep 300
[4]   Çalışıyor           sleep 400 &

Örnekte görüldüğü gibi 4 numaralı process çalıştırıldı. İstersek hangi processin çalışacağını belirtebiliriz.

$ bg 1
[1] sleep 100 &

$ jobs
[1]   Çalışıyor           sleep 100 &
[2]-  Durdu                   sleep 200
[3]+  Durdu                   sleep 300
[4]   Çalışıyor           sleep 400 &

bg jobnumarası ya da bg %jobnumarası

Şeklinde jobs listesinden istenilen işlem çalıştırılabilir.

Arkaplana Atılmış İşlemi Önplanda Çalıştırmak (fg komutu)

Herhangi bir işlemi arkaplanda çalıştırdık veya işlemi durdurarak arkaplana attık. Bu işlemleri tekrar önplanda getirerek çalıştırmak için fg komutu kullanılabilir.

$ sleep 20
^Z
[1]+  Durdu                   sleep 20

$ jobs
[1]+  Durdu                   sleep 20

$ fg
sleep 20

fg komutu ile jobs listesindeki son işlemi ön plana getirdik. Yine bg komutunda olduğu gibi jobs listesindeki + işareti hangi işlemin devreye sokulacağını belirtiyor.

Aşağıdaki gibi bir jobs listemiz olsun.

$ jobs
[1]   Durdu                   sleep 100
[2]-  Durdu                   sleep 200
[3]+  Durdu                   sleep 300
[4]   Çalışıyor           sleep 400 &

Şimdi bu listeden istenilen bir işlemi önplana alalım ve çalıştıralım.

$ fg 3
sleep 300

Listemizdeki üçüncü işlemi ön plana getirerek çalıştırdık.

Linuxte Process Listesini Görüntülemek (ps, pstree, top)

ps komutu işlemlerin durumunu gösteren bir programdır.

$ ps
  PID TTY          TIME CMD
 4570 pts/0    00:00:00 bash
 5869 pts/0    00:00:00 ps

Terminal ekranımıza ps yazarak komutu çalıştırabiliriz. Bu bize bulunduğumuz terminaldeki çalışan işlemleri(process) verir.

Başlıkları açarsak:

PID: Process ID (İşlem Kimliği)
TTY: Terminal ismi, işlemin hangi terminalde çalıştığını gösterir
TIME: CPU zamanı
CMD: Çalıştırılan komutu gösterir

Ağaç şeklinde process listesini getirmek:

$ ps axf -o pid,ppid,comm
  PID  PPID COMMAND
    2     0 kthreadd
    3     2  \_ ksoftirqd/0
    5     2  \_ kworker/0:0H
..
..

Yukarıdaki çıktı uzun olduğu için kısalttım bu parametreler ile kullanmak bize ağaç şeklinde process listesini verecektir.

Top ile Aktif Process Listesi

top programı aktif olarak process listesini terminal ekranına getirir ve bu listeyi günceller.

$ top

Terminal ekranına top yazılarak ekrana getirilebilir.

Pstree ile Process Ağacını Görüntülemek

pstree komutu ile process listesini ağaç yapısıyla yani parent ve child processlerin birbiriyle ilişkisini görsel bir şekile görüntüleyebiliriz.

$ pstree

Komutu terminal ekranına yazarak çalıştırabiliriz.

$ sleep 20 &
[1] 6345

$ pstree -p -s 6345
systemd(1)───lightdm(770)───lightdm(1329)───startdde(1352)───dde-session-ini(1439)───deepin-terminal(4565)───bash(4570)───sleep(6345)

Process ID'sini belirterek belirtilen pid değerine sahip processin process ağacını parent processleriyle ilişkisi ekrana getirebiliriz.

Aktif Processi Sonlandırmak (kill)

Kill komutu başka bir processe sinyal göndermek için kullanılır. Ancak genellikle başka bir processi sonlandırmaka için TERM sinyali göndermek için kullanılır.

Kullanılabilir Sinyaller:

$ kill -l
 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
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

Eğer sinyal belirtilmez ise default olarak 15 numaralı SIGTERM sinyalini belirtilen processe gönderir. Bu sinyal processi sonlandırmak için gönderilir.

$ sleep 200 &
[1] 5719

$ jobs
[1]+  Çalışıyor           sleep 200 &

$ kill 5719
$ jobs
[1]+  Sonlandırıldı        sleep 200


$ sleep 200 &
[1] 5757

$ jobs
[1]+  Çalışıyor           sleep 200 &

$ kill %1
$ jobs
[1]+  Sonlandırıldı        sleep 200

Yukarıdaki örnekte hem pid değeriyle hemde jobs listesindeki numarayı kullanarak processi sonlandırmayı gösterdik.