Langkah-langkah membuat daemon:
1. Fork parent process dan penghentian parent process
Langkah pertama adalah melakukan forking untuk membuat proses baru kemudian mematikan parent proses. Parent proses yang mati akan membuat system mengira proses telah selesai sehingga akan kembali ke terminal user. Proses anak yang melanjutkan program.
Berikut adalah kode programnya :
pid_t pid;
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(0);
3. Membuat Unique Session ID (SID)
Child process harus memiliki Unique Session ID (SID) dari kernel untuk dapat beroperasi. Sebaliknya, child process menjadi orphan proses pada sistem. Tipe pid_t yang dideklarasikan pada bagian sebelumnya, juga digunakan untuk pembuatan SID baru menggunakan implementasi setsid(). Fungsi setsid() memiliki return tipe yang sama dengan fork().
Berikut adalah kode programnya :
pid_t sid;
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
4. Mengubah direktori kerja
Direktori kerja yang aktif harus diubah ke suatu tempat yang telah pasti akan selalu ada, misalnya root. Pengubahan tempat direktori kerja dapat dilakukan dengan implementasi fungsi chdir(). Fungsi chdir() mengembalikan nilai -1 jika gagal.
Berikut adalah kode programnya:
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 implementasi fungsi close().
Berikut adalah kode programnya:
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
6. Membuat loop utama (inti kerja dari daemon)
Agar daemon selalu berjalan, maka diperlukan sebuah looping. Berikut adalah kode programnya:
while(1)
{
// di sini adalah kode program dari proses yang akan dijalankan menggunakan daemon
sleep(30); // memberi jeda waktu selama 30 detik sebelum mengulang kembali prosesnya.
}
exit(EXIT_SUCCESS);
Kode program secara utuhnya adalah sebagai berikut:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
int main(void)
{
pid_t pid, sid;
pid = fork();
if (pid < 0)
{
exit(EXIT_FAILURE);
}
if (pid > 0)
{
exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if (sid < 0)
{
exit(EXIT_FAILURE);
}
if (chdir("/") < 0)
{
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while(1)
{
// di sini adalah kode program dari proses yang akan dijalankan menggunakan daemon
sleep(30); // memberi jeda waktu selama 30 detik sebelum mengulang prosesnya.
}
}
Sekian dan semoga bermanfaat...
Tidak ada komentar:
Posting Komentar