Sabtu, 17 Oktober 2015

Daemon Bukan Doraemon

Belajar Sistem Operasi #2

Perkenalan dengan daemon
Daemon adalah proses yang berjalan dibalik layar (background) dan tidak melbatkan input dari user melalui standar input/output

Proses Pembuatan Daemon
1. Fork Parent Processs dan penghentian Parent Process
Langkah pertama membuat daemon adalah forking, yaitu membuat proses baru lalu mematikan parent proccessnya sehingga dilanjutkan oleh anaknya. Process induk yang mati akan terlihat seolah olah proses tsb telah selesai sehingga akan kembali ke terminal user.

2. Mengubah mode file menggunakan UMASK(0)
Langkah selanjutnya untuk membuat daemon adalah mengubah mode file dengan umask(0), yang akan memberi akses penuh dari file yang dibuat oleh daemon, sehingga file tersebut (termasuk log) dapat dibaca dan ditulis dengan benar.

3. Membuat Unique Session ID (SID)
Child process harus memiliki SID unikdari kernel untuk bisa beroperasi. Pembuatan SID dapat menggunakan implementasi setsid(), yang memiliki return tipe yang sama seperti fork.

4. Mengubah Directory Kerja 
Direktori kerja yang digunakan harus direktori yang sudah dan selalu ada, pengubahan direktori ini dapat menggunakan fungsi chdir(), dimana fungsi ini akan mengembalikan nilai -1 jika gagal.

5. Menutup File Descriptor Standar
Langkah terakhir untuk mengeset daemon adalah menutup file descriptor standar (STDIN,STDOUT, STDERR) karena daemon tidak perlu menggunakan terminal dan file descriptor dapat berulang yang berpotensi mengganggu keamanan system maka ditutuplah file descriptor standar dengan fungsi close().

6. Membuat Loop utama (inti kerja dari daemon)
Daemon bekerja dalam jangka waktu tertentu sehingga diperlukan sebuah looping. Ini adalah bagian custom, jadi dapat dimodifikasi sesuai dengan proses daemon yang ingin dibuat.

Contoh implementasi daemon proses 1-5

Untuk implementasi no 6, kita akan mencoba menyelesaikan suatu soal.
Uul mempunyai teman, seorang editor foto terkenal bernama Sekar. Suatu ketika, Sekar sedang menerima banyak sekali pekerjaan untuk meng-edit foto. Salah satu jenis pekerjaan yang ia dapatkan adalah untuk mejadikan foto berwarna menjadi grayscale. Karena begitu banyak foto yang harus ia edit, Sekar meminta bantuan kepada Uul untuk membuat sebuah program yang dapat merubah foto berwarna menjadi foto grayscale saat foto tersebut dibuka dengan image viewer. Dengan ketentuan, foto yang diedit hanya yang berekstensi .jpg, dan hasil dari proses editing foto tersebut, nama filenya adalah namafile_copy.jpg. Namun, karena Uul sedang keluar kota untuk pekerjaan lain, sebagai teman yang baik bantulah Uul untuk memenuhi permintaan Sekar tersebut!
Sebelum mulai mengerjakan soal diatas maka kita membutuhkan suatu tool image editor untuk mengubah warna suatu gambar. Disini saya menggunakan ImageMagick. Untuk menginstallnya, anda dapat mengikuti langkah langkahnya pada website dibawah ini.



Untuk menyelesaikan soal diatas langkah pertama yang harus dikerjakan adalah membuat template daemon pada contoh implementasi proses 1-5.




Lalu masukan program utama yang sudah saya buat disini

Compile program yang telah dibuat dengan cara mengetikan diterminal
gcc -o "nama_program_yg_diinginkan" "nama_file".c
Untuk menjalankannya ketik
./"nama_program_yg_diinginkan"
Sekarang cek apakah proses kita berjalan dengan membuka suatu file foto berekstensi .jpg

Dan hasilnya terdapat file baru dengan filename ditambah dengan nama _copy, dimana file tersebut sudah menjadi grayscale.


Mudah bukan membuat daemon? Selamat mencoba dan terus belajar. Terima Kasih!

#ProcessAndDaemon