Ö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.
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ış.
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.
İş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ı.
İş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.
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.
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 programı aktif olarak process listesini terminal ekranına getirir ve bu listeyi günceller.
$ top
Terminal ekranına top
yazılarak ekrana getirilebilir.
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.
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.