Mari Belajar Linux – Pengurusan proses dengan Proses Background & Foreground (Bahagian 2)

 

Artikel Siri Mari Belajar Linux akan diteruskan dengan Pengurusan Proses (Bahagian Kedua).  Ia akan membincangkan pengunaan proses foreground, background dan arahan-arahan seperti “jobs“, “fg” dan “nohup“.

Proses Foreground

Setiap arahan yang dijalankan pada command prompt dari terminal Linux merupakan proses foreground. Contohnya arahan “ls”, “cd”, “ps” dan sebagainya.

Sebagai latihan bagi proses foreground ini, mari kita bina shell script yang mudah.  Shell script merupakan aturcara mudah yang akan dijalankan oleh Linux shell.  Dengan menggunakan editor kegemaran anda, bina aturcara berikut:

vi helloworld.sh

Masukan kod aturcara berikut dengan menekan butang “i”:

#!/bin/bash
c=1
while [ $c -le 60 ]
do
 echo "Hello World! - $c times"
 (( c++ ))
 sleep 5
done

Simpan fail dengan menekan butang ESC, titik bertindih “:” dan wq!.

:wq!

Aturcara mudah ini akan memaparkan mesej “Hello World! – n times” sebanyak 60 kali di mana selepas dipaparkan, aturcara ini akan menunggu 5 saat sebelum memaparkan mesej yang berikutnya.

Tukar mode fail supaya ianya bleh dijalankan:

chmod +x helloworld.sh

Jalankan aturcara:

./helloworld.sh

Output aturcara ini adalah seperti berikut:

Hello World! - 1 times
Hello World! - 2 times
Hello World! - 3 times
Hello World! - 4 times
Hello World! - 5 times
Hello World! - 6 times
Hello World! - 7 times
Hello World! - 8 times
Hello World! - 9 times
Hello World! - 10 times
Hello World! - 11 times
Hello World! - 12 times
Hello World! - 13 times
Hello World! - 14 times
Hello World! - 15 times
...
Hello World! - 60 times

Semasa aturcara ini berjalan, satu proses “helloworld.sh” telah dibina dan berjalan sebagai proses foreground.  Proses foreground ini tidak membolehkan kita untuk menjalankan proses lain seperti arahan “ls”, “cp” dan sebagainya. Walau bagaimana pun, proses foreground yang sedang berjalan ini boleh dimatikan pada bila-bila masa dengan menekan butang CTRL+c.

Proses Background

Aturcara ini boleh dijalankan menjadi proses background dengan menggunakan simbol “dan” iaitu “&“:

./helloworld.sh &

Lihat contoh berikut, di mana setelah proses dijalankan secara background, kita boleh menjalankan arahan lain seperti “pwd”:

root@vps:~# ./helloworld.sh &
[1] 30032
root@vps:~# Hello World! - 1 times
pwd
/root

Kita juga boleh melihat proses yang berjalan dengan arahan “ps“:

root@vps:~# ./helloworld.sh &
[1] 30032
root@vps:~# Hello World! - 1 times
pwd
/root
root@vps:~# Hello World! - 2 times
ps
 PID TTY TIME CMD
29846 pts/0 00:00:00 bash
30032 pts/0 00:00:00 helloworld.sh
30034 pts/0 00:00:00 sleep
30035 pts/0 00:00:00 ps
root@vps:~# Hello World! - 3 times
Hello World! - 4 times
Hello World! - 5 times
Hello World! - 6 times
Hello World! - 7 times
Hello World! - 8 times

Arahan “jobs”

Arahan “jobs” ini boleh digunakan untuk melihat arahan atau aturcara yang sedang berjalan sebagai proses background:

jobs

Outputnya adalah seperti berikut:

root@vps:~# jobs
[1]+ Running ./helloworld.sh &

Ini bermakna ada satu proses yang sedang berjalan sebagai proses background dengan job-id 1.

Mengembalikan proses background ke foreground

Proses yang sedang berjalan secara background boleh dikembalikan kepada proses foreground dengan arahan “fg <job-id>” di mana “job id” ini adalah berdasarkan output dari arahan “jobs” tadi.  Untuk mengembalikan aturcara “helloworld.sh” ke foreground:

fg 1

Lihat di mana aturcara ini telah bertukar menjadi proses foreground:

root@vps:~# ./helloworld.sh &
[1] 30180
root@vps:~# Hello World! - 1 times
Hello World! - 2 times
Hello World! - 3 times
Hello World! - 4 times
jobs
[1]+ Running ./helloworld.sh &
root@vps:~# Hello World! - 5 times
Hello World! - 6 times
fg 1
./helloworld.sh
Hello World! - 7 times
Hello World! - 8 times

 

“Pause” Proses Foreground dan Tukar ke Background

Proses yang sedang berjalan secara foreground, boleh di “pause” dan ditukar menjadi proses background pada bila-bila masa dengan menekan butang CTRL+z:

root@vps:~# ./helloworld.sh
Hello World! - 1 times
Hello World! - 2 times
^Z
[1]+ Stopped ./helloworld.sh

Kita boleh sambung kembali proses tersebut dengan arahan “fg“:

root@vps:~# fg 1
./helloworld.sh
Hello World! - 3 times
Hello World! - 4 times
Hello World! - 5 times

Lihat contoh di atas, proses akan kembali disambung ke foreground dengan mesej “Hello World! -3 times” setelah kita “pause” dengan “Hello World! – 2 times”.

Arahan “nohup”

Proses yang dijalankan secara background akan mati apabila kita tutup atau “exit” dari terminal.  Contohnya, jika sesi terminal secara jarak jauh seperti telnet atau SSH kita tutup (kita akan bincangkan tentang remote access ke Linux server pada artikel yang lain), program “helloworld.sh &” yang kita jalankan tadi akan mati.  Bagi mengatasi masalah ini, arahan “nohup <arahan &>” boleh digunakan.  Contohnya:

nohup ./helloworld.sh &

Aturcara ini akan terus berjalan walau kita mematikan sesi terminal yang sedang digunakan.