Proses Hantu!!

               Pernahkah anda merasakan di komputer anda bekerja terdapat folder yang muncul atau menghilang dengan sendirinya tanpa diberikan perintah oleh anda ? bahasan kali ini ada hubungannya dengan hal tersebut, yaitu tentang daemon, daemon adalah proses yang berjalan sebagai background proses tanpa kontrol langsung dari user.
               Berikut adalah tahapan untuk membuat daemon, terdapat 6 tahapan utama sebagai berikut :
                  1. Fork Parent Processs dan penghentian Parent Process
                  2. Mengubah mode file menggunakan UMASK(0);
                  3. Membuat Unique Session ID (SID)
                  4. Mengubah Directory Kerja
                  5. Menutup File Descriptor Standar
                   6. Membuat Loop utama (inti kerja dari daemon)

1. Fork Parent Process dan penghentian Parent Process
               Langkah pertama adalah melakukan forking untuk membuat process baru kemudian mematikan Parent Process. Process induk yang mati akan membuat system mengira proses telah selesai sehingga akan kembali ke terminal user. Proses anak yang melanjutkan program setelah proses induk dimatikan berikut adalah contohnya :
pid_t pid,sid;
pid=fork();
if(pid < 0)
{
exit(EXIT_FAILURE);
}
if(pid > 0)
{
exit(EXIT_SUCCESS);
}
2. Mengubah mode file menggunakan UMASK(0);
               Untuk menulis beberapa file (termasuk logs) yang dibuat oleh daemon, mode file harus diubah untuk memastikan bahwa file tersebut dapat ditulis dan dibaca secara benar. Pengubahan mode file menggunakan implementasi umask().
3. Membuat Unique Session ID (SID)
               Child Process harus memiliki unik SID dari kernel untuk dapat beroperasi. Sebaliknya, Child process menjadi Orphan Proses pada system. Tipe pid_t yang dideklarasikan pada bagian sebelumnya, juga digunakan untuk membuat SID baru untuk child process. Pembuatan SID baru menggunakan implementasi setsid(). Fungsi setsid() memiliki return tipe yang sama seperti fork().
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
4. Mengubah Directory Kerja

               Directori kerja yang aktif harus diubah ke suatu tempat yang telah pasti akan selalu ada. Pengubahan tempat direktori kerja dapat dilakukan dengan implementasi fungsi chdir (). Fungsi chdir() mengembalikan nilai -1 jika gagal.
if((chdir(“/”)) < 0)
{
exit(EXIT_FAILURE);

}
5. Menutup File Descriptor Standar

               Salah satu dari langkah terakhir dalam mengeset daemon adalah menutup file descriptor standar (STDIN, STDOUT, STDERR). Karena daemon tidak perlu menggunakan kendali terminal, file descriptor dapat berulang dan berpotensi memiliki bahaya dalam hal keamanan. Untuk mengatasi hal tersebut maka digunakan implemtasi fungsi close().
close(STDIN_FILENO);
close(STDOUT_FILENO);

close(STDERR_FILENO);
6. Membuat Loop utama (inti kerja dari daemon)

               Daemon bekerja dalam jangka waktu tertentu, sehingga diperlukan sebuah looping.
Berikut adalah contoh inti kerja program daemon yang saya buat
               Jika tahapan tahapan untuk membuat program daemon sudah benar, maka program daemon ini akan membaca semua proses, kemudian menyeleksinya hingga tersisa yang membuka file bertipe .jpg, kemudian membuat salinan dari file tersebut yang diubah menjadi gray scale, atau menjadi hitam putih. File yang baru dibuat namanya akan sama dengan file aslinya tetapi ditambahkan _copy di belakang nama filenya. Sebelumnya saya sudah menginstal imagemagick untuk melakukan perintah untuk mengubah gambar.

Berikut cotoh lainya

               Program daemon kali ini akan mempopup text yang berasal dari file virus.txt, dengan bantuan perintah zenity pada linux. Text yang saya popup semua terdapat pada file virus.txt, tetapi yang saya cetak semua karakter yang ada sebelum tanda "," (koma). Text akan dipopup satu detik setelah text sebelumnya dipopup.
               Contoh yang terakhir sangatlah simpel, tetapi bisa sangat berguna untuk memastikan process yang berjalan dikomputer anda tidak ada yang tidak anda inginkan. Karena daemon yang berjalan akan mencatat semua process yang di lakukan semua user yang ada kedalam file C08_log.txt berkat perintah ps ux.


Komentar

Postingan populer dari blog ini

Manajemen Biaya Proyek