Daemon merupakan sebuah proses. Proses ini bekerja dibalik layar (background) sehingga tidak berinteraksi dengan user secara langsung lewat standar I/O serta tidak ada pemberitahuan error yang terjadi. Penjelasan mengenai proses adalah program tunggal yang sedang dalam keadaan dieksekusi pada alamat virtual.
Fungsi proses daemon itu sendiri adalah untuk membuat suatu program yang dapat secara otomatis berjalan secara terus-menerus dalam rentang waktu tertentu.
Berikut ini cara membuat proses daemon:
1. Fork Parent Process dan penghentian Parent Process
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. *implementasi ada dibawah :D
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(). *implementasi ada dibawah :D
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(). *implementasi ada dibawah :D
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. *implementasi ada dibawah :D
5. Menutup File Descrptor 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(). *implementasi ada dibawah :D
6. Membuat Loop yang besar utama (inti kerja dari daemon)
Daemon bekerja dalam jangka waktu tertentu, sehingga diperlukan sebuah looping. Program yang akan dijalankan secara otomatis diletakan di dalam loop ini. *implementasi ada dibawah :D
Berikut ini implementasi dalam fungsi main:
int main(void) {
/* >>>> Langkah nomer 1 <<<< */
pid_t pid=0;
pid_t sid=0;
pid=fork();
if(pid<0 span="">0>
printf("FAILED\n");
exit(1);
}
if(pid>0){
printf("SUCCSESS\n");
exit(0);
}
/* >>>> Langkah nomer 2 <<<< */
umask(0);
/* >>>> Langkah nomer 3 <<<< */
sid=setsid();
if(sid<0 exit="" span="">0>
/* >>>> Langkah nomer 4 <<<< */
if((chdir("/"))<0 exit="" span="">0>
/* >>>> Langkah nomer 5 <<<< */
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
/* >>>> Langkah nomer 6 <<<< */
while(1){
//programnya yang akan dieksekusi dengan proses daemon diletakkan disini
sleep(10); //sleep(10) berfungsi untuk memberi selang waktu 10 detik untuk mengulang proses
}
return 0;
}
Silahkan dicoba proses daemonnya dengan menggunakan program dasar dahulu, misal "printf("Tulisan ini muncul setiap 10 detik\n"); kemudian copy ke dalam while yang berada pada langkah ke-6. Selamat mencoba . . .
Tidak ada komentar:
Posting Komentar
silahkan tinggalkan komentar untuk menjadi lebih baik . . .