BAB II PROCESS DAN THREAD
I. Dasar Teori Proses Proses pada Linux merupakan aktifitas permintaan user terhadap sistem operasi. Model proses pada Linux mirip dengan UNIX, dimana prinsip dasar keduanya menggunakan fungsi fork() dan exec(). fork() digunakan untuk membuat proses baru sedangkan exec() digunakan untuk memanggil program. Kedua pendekatan diatas merupakan dua hal yang berbeda, dimana proses (child) bisa diciptakan tanpa membuka program baru, dan secara sederhana akan meneruskan program awal (parent) untuk mengeksekusi perintah yang sama pada program awal. Untuk membuat proses baru, bisa dengan mengetikan perintah langsung pada shell Linux. TIPE PROSES : Terdapat beberapa tipe proses yang dikenal dalam OS berbasis Linux pada umumnya, antara lain: Interactive : proses yang dimulai (dan dikontrol oleh) shell . Bisa tampak di luar (foreground) ataupun hanya di dalam (background). Batch : proses yang tidak berhubungan dengan terminal, tetapi menunggu untuk dieksekusi secara berurutan (sekuensial). Daemon : proses yang dimulai ketika Linux booting dan berjalan secara background. Proses ini menunggu permintaan dari proses lainnya, bila tidak ada request, maka berada dalam keadaan ‘idle’. # Tipe-tipe proses dalam Linux, dibagi ke dalam 3 bagian. Sebutkan dan jelaskan: Tipe-tipe proses dalam Linux, dibagi ke dalam 3 bagian, yaitu :
Interactive : Proses yang diprakarsai oleh sebuah shell dan berjalan dalam foreground dan background. seperti : terminal, software running, dll. Batch : Sebuah seri dari proses-proses yang dijadwalkan untuk dieksekusi pada suatu waktu tertentu, proses batch ini juga tidak berhubungan dengan terminal, tapi menunggu dieksekusi secara sekuensial. Daemon : Proses yang diinisialisasi saat booting untuk membentuk suatu fungsifungsi sistem yang dibutuhkan, bila tidak ada request maka akan berada pada keadaan idle, seperti : LPD, NFS, dan DNS.
WAHYU MEGA K_145150407111042
PTIIK 2015
-Process Environment Pada sistem operasi Linux process environment terdiri dari dua komponen, argumen dan environment. Argumen adalah daftar opsi tambahan pada CLI yang berkaitan dengan perilaku program ketika dijalankan, sedangkan environment adalah daftar parameter, baik berupa variabel, direktori home yang secara tekstual dibutuhkan oleh program. Environment variable biasanya terdiri dari beberapa informasi seperti: • PATH, daftar lokasi direktori dimana file executable berada. • HOME, lokasi direktori home. • CPPLIBS, lokasi dimana library yang berkaitan dengan program disimpan. • HOSTNAME digunakan untuk penamaan mesin. • USER user yang digunakan pada saat login pada sistem operasi. # Untuk itu kita harus mempelajari Manajemen Proses pada Linux. Perintah INTI dari proses manajemen proses di Linux ada 2. Sebutkan ! Pertama : PERINTAH PS Perintah atau command ps (process status) di gunakan untuk menampilkan informasi proses yang sedang berjalan termasuk nomor PID (Process Identification Number) dari proses tersebut. Proses atau biasa disebut task akan berjalan jika ada sebuah aplikasi yang sedang dijalankan, setiap proses yang berjalan oleh system diberi nomor PID yang unik.
Berikanlah contoh hasil output perintah pertama yang Anda tulis di atas (tempelkan hasil screenshot pada kolom di bawah ini)
Kedua: PERINTAH KILL Perintah kill adalah salah satu perintah daasar Linux yang digunakan untuk menghentikan atau mematikan proses yang sedang berjalan pada Sistem Operasi Linux / UNIX. perintah ini sangat penting karena dengan memahami perintah ini kita bisa mengetahui mana proses yang mengganggu performa, tidak dibutuhkan, dll.
WAHYU MEGA K_145150407111042
PTIIK 2015
Berikanlah contoh hasil output perintah kedua yang Anda tulis di atas (tempelkan hasil screenshot pada kolom di bawah ini)
1. Memulai menggunakan perintah ps
# Apa perintah yang seharusnya Anda tulis agar menampilkan hasil output seperti di atas ? ps -aux | less # Apa fungsi perintah tersebut ? option -a akan menampilkan semua user yang sedang menjalankan proses, option -u berfungsi untuk menampilkan semua proses lain yang sedang berjalan, option -x berfungsi untuk menampilkan yanginitidak #Lengkapi pernyataanproses di bawah !! dikontrol oleh terminal (tty) seperti daemon yang dijalankan saat booting.
WAHYU MEGA K_145150407111042
PTIIK 2015
2. Menampilkan semua proses yang sedang berjalan pada system
# Apa perintah yang seharusnya Anda tulis agar menampilkan hasil output seperti di atas ? ps -a # atau Anda bisa menggunakan perintah lain, seperti ? ps -e
# option -a
akan menampilkan semua user yang sedang menjalankan proses,
option
berfungsi untuk menampilkan semua proses yang lain yang sedang
-u
berjalan, option
-x
berfungsi untuk menampilkan proses yang tidak dikontrol oleh
terminal (tty) seperti daemon yang dijalankan saat booting. # Dan apa perbedaan perintah di atas dengan perintah ps -e |more ?
Ps -e Akan memberikan informasi status proses pada sistem kita. Menampilkan berbagai informasi mengenai proses apa saja yang sedang aktif, siapa pemilik proses tersebut, berapa lama proses berjalan dan berapa ID atau nomor pengenal proses.( Informasi secara langsung ) Ps -e | more Opsi -e menampilkan semua proses dalam bentuk 4 kolom : PID, TTY, TIME dan CMD. Jika
WAHYU MEGA K_145150407111042
PTIIK 2015
# Dan perintah apa yang berfungsi menampilkan semua proses dalam format sesuai definisi user yaitu terdiri dari kolom PID dan CMD.? ps –eo pid,cmd | more 3. Melihat semua proses yang berjalan kecuali root # Pada poin ketiga ini, Anda dapat menggunakan perintah seperti di bawah ini : ps -U root -u root -N
#Bagaimana hasil ouputnya ?
4. Menampilkan proses yang sedang dijalankan oleh user tertentu # Untuk menjalankan fungsi pada poin empat, Anda dapat menggunakan perintah seperti di bawah ini : ps -u <user>
#Bagaimana hasil ouputnya ?
WAHYU MEGA K_145150407111042
PTIIK 2015
# Bagaimana contoh sintaksnya ? ps –u wagem 5. Menampilkan proses yang sedang berjalan dalam bentuk pohon # Untuk menjalankan fungsi pada poin lima, Anda dapat menggunakan perintah seperti di bawah ini : pstree
#Bagaimana hasil ouputnya ?
#Apa perbedaan perintah pstree dengan pstree –h ? $ pstree digunakan untuk melihat sistem secara hirarki/parent $ pstree -h berfungsi untuk menampilkan proses dan ancestor yang tercetak tebal
CONTROLLING PROSES Dalam sistem operasi linux semua proses dikontrol oleh shell yaitu sebuah antar muka antara sistem operasi dengan user. Sebagai contohnya kita akan mengirim output y yang tidak akan pernah selesai. Dengan menggunakan sintak sebagai berikut : $ yes #Bagaimana untuk menghentikan perintah $yes diatas?
ctr + c
WAHYU MEGA K_145150407111042
PTIIK 2015
Hasil output:
#Bagaimana cara agar perintah yes tetap dijalankan tetapi shell tetap digunakan untuk hal yang lain ? $ yes>/dev/null & Hasil Output:
# Bagaimana Untuk melihat status proses yang sedang berjalan?? $ jobs Hasil Output:
WAHYU MEGA K_145150407111042
PTIIK 2015
PERINTAH KILL Perintah kill adalah salah satu perintah daasar Linux yang digunakan untuk menghentikan atau mematikan proses yang sedang berjalan pada Sistem Operasi Linux / UNIX. perintah ini sangat penting karena dengan memahami perintah ini kita bisa mengetahui mana proses yang mengganggu performa, tidak dibutuhkan, dll. #Bagaimana contoh perintah kill ? $ kill <sinyal>
# PID adalah nomor proses yang akan di hentikan. Tidak tahu PID proses mana yang akan dihentikan? Cobalah bereksperimen dengan perintah:
ps aux | grep <myusername>
# Lalu tempelkan hasil output pada kolom di bawah ini
WAHYU MEGA K_145150407111042
PTIIK 2015
Daemons Daemons adalah sebuah proses yang bekerja pada background karena proses ini tidak memiliki terminal pengontrol. Dalam sistem operasi Windows biasanya lebih dikenal dengan sebutan service. Daemon adalah sebuah proses yang didesain supaya proses tersebut tidak mendapatkan intervensi dari user. Daemon biasanya bekerja dalam jangka waktu yang sangat lama dan bertugas menerima request dan menjalankan responsnya. #Apa yang membedakan Daemons dengan proses lain ? Yang membedakan daemon dengan proses lain adalah daemon tidak memiliki pengontrol baik itu STDOUT, STDIN, maupun STDERR, daemon juga tidak memiliki parent proses id, dan daemon berjalan dalam previlege super user
Berikut ini adalah beberapa cara untuk membuat daemon: a. Forking dan pembunuhan Proses induk. Langkah pertama dari pembuatan daemon adalah dengan menspawn proses menjadi induk dan anak dengan melakukan forking, kemudian membunuh proses induk. Proses induk yang mati akan menyebabakan sistem operasi mengira bahwa proses telah selesai sehingga akan kembali ke terminal user. # Contoh Script : pid_t pid,sid; pid=fork(); if(pid < 0) { exit(EXIT_FAILURE); } b. Membuat proses bekerja secara independen if(pid > 0) Daemon harus bekerja secara independen daripada proses-proses lain, termasuk juga proses yang menjalankannya. Langkah bisa dilakukan dengan memanggil fungsi setsid(), sehingga proses akan mendapatkan sebuah session ID yang baru. # Contoh Script : sid = setsid(); if(sid < 0) { exit(EXIT_FAILURE); }
WAHYU MEGA K_145150407111042
PTIIK 2015
c. Menutup standar I/O deskriptor yang diwarisi Untuk mencegah terjadinya intervensi dari user serta untuk pengamanan, maka standar I/O descriptor dan descriptor yang diwarisi dari proses induk harus ditutup. Ada 3 jenis standar I/O descriptor : STDIN (standar input), STDOUT (standar output), STDERR (standar error). # Contoh Script : close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO);
d. Melakukan masking pada File Creation Sebagian besar daemon bekerja dalam previlege super user. Daemon biasanya memproteksi setiap file yang dibuat, dengan alasan keamanan. Fungsi umask() akan mencegah file-file previleges yang tidak aman dalam setiap pembuatan file. # Contoh Script : pid_t pid,sid; pid=fork(); if(pid < 0) { exit(EXIT_FAILURE); } if(pid > 0)
e. Running Directory Directory kerja daemon haruslah sebuah directory yang selalu hidup. Bisa saja pada saat starting working directorynya pada saat itu berada pada user home. Karena daemon bekerja sampai sistem reboot, maka file sistem user directorynya takkan pernah bisa di unmount. # Contoh Script : sid = setsid(); if(sid < 0) exit(EXIT_FAILURE); f. Mendengarkan signal if((chdir(“/home/assassin/modul2/shift2.1/”)) < 0)
WAHYU MEGA K_145150407111042
PTIIK 2015
f. Mendengarkan signal # Tulislah pada kolom di bawah ini, apakah maksud dari proses ini ? Maksud dari proses mendengarkan signal? Karena tugas utama daemon adalah mendapatkan requst, maka dari itu di dalam sebuah daemon terdapat pendengar signal yang mampu merespon ketika daemon dikirimi signal tertentu yaitu dengan memanggil fungsi signal untuk menginstal sebuah signal listener.
g. Logging # Sebutkan beberapa cara untuk melakukan proses logging dan berikan penjelasan? Metoda Log File : yaitu semua file di tulis kedalam sebuah file tertentu yang di atur oleh file h. konfigurasi daemon tersebut dan melakukannya dengan memanggil fungsi fopen(). Metoda Logi.Server : Yaitu daemon khusus milik UNIX yang dibgunakan untuk logging yaitu syslogd. j. Daemon ini mengelompokkan pesan-pesan menjadi beberapa kelompok atau facility, # kelompok dapat dikirim ke tempat yang berbeda. kemudian
Tantangan !! Coba Anda buat daemon yang dapat melakukan beberapa fungsi yaitu menghapus, membuat, mengopy dan memindahkan file, serta daemon yang mencatat perubahan isi folder di atas, yaitu waktu dan perubahan apa yang terjadi pada suatu log-file. Tugas tersebut akan dikerjakan oleh daemon pertama setelah beberapa saat (user dapat menentukan kapan waktu pengeksekusian fungsi diatas) setelah tugas – tugas tersebut dicatat oleh sebuah file pencatat dan dan tugas daemon kedua adalah mencatat setiap perintah yang telah dieksekusi dan maupun mencatat kesalahan perintah. Daemon 1 : berfungsi untuk melakukan semua perintah terhadap file. Source : int main(void) { FILE *tulis,*catatan; pid_t pid; char perintah[100],berkas1[100],berkas2[100]; int nilai; pid = fork(); if (pid < 0) { exit(EXIT_FAILURE); } if (pid > 0) { WAHYU MEGA K_145150407111042
PTIIK 2015
exit(EXIT_SUCCESS); } umask(0); sid = setsid(); if (sid < 0) { exit(EXIT_FAILURE); } close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); tulis = fopen(”catatan.txt”, “r”); while(fscanf(tulis,”%s”,&perintah)!=EOF) { if(strcmp(perintah,”buat”)==0) { fscanf(tulis,”%s”,&berkas1); buatfile(berkas1); }if(strcmp(perintah,”hapus”)==0) { fscanf(tulis,”%s”,&berkas1); hapus(berkas1); } if(strcmp(perintah,”waktu”)==0) { fscanf(tulis,”%s”,&berkas1); nilai = atoi(berkas1); waktu(nilai); } if(strcmp(perintah,”ganda”)==0) { fscanf(tulis,”%s”,&berkas1); fscanf(tulis,”%s”,&berkas2); ganda(berkas1,berkas2); } if(strcmp(perintah,”pindah”)==0) { fscanf(tulis,”%s”,&berkas1); fscanf(tulis,”%s”,&berkas2); pindah(berkas1,berkas2); } } fclose(tulis); kill(sid2, SIGSTOP); kill(sid, SIGSTOP); exit(EXIT_SUCCESS); }
WAHYU MEGA K_145150407111042
PTIIK 2015
Daemon 2 : berfungsi sebagai pencatat semua perubahan yang terjadi dan yang dilakukan oleh daemon satu. Source : void catat(char *pesan,char nama[100]) { pid_t pid; pid = fork(); if (pid < 0) { exit(EXIT_FAILURE); } if (pid > 0) { exit(EXIT_SUCCESS);} umask(0); sid2 = setsid(); if (sid2 < 0) { exit(EXIT_FAILURE); } close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); time_t curtime; struct tm *loctime; FILE *pf; char buffer[SIZE]; curtime = time(NULL); loctime = localtime(&curtime); strftime (buffer, SIZE, “[%d/%m/%y (%I:%M %p)]”, loctime); pf=fopen(”wajib.log”, “a+”); fprintf(pf,”%s %s %sn”, buffer, pesan, nama); fclose(pf
WAHYU MEGA K_145150407111042
PTIIK 2015