Dalam kesempatan kali ini , kita akan membuat sebuah daemon dan menjalankannya pada terminal Linux.
Pertama-tama mari kita mengenal terlebih dahulu daemon dan macam-macam proses yang terlibat.
Pertama-tama mari kita mengenal terlebih dahulu daemon dan macam-macam proses yang terlibat.
Apa itu Daemon ??
Daemon merupakan sebuah program yang berjalan sendiri , dibalik layar dan tidak memiliki interface untuk dikontrol , daemon juga tidak dapat berinteraksi langsung dengan user.
Bagaimana cara membuat sebuah Daemon ??
Terdapat 6 tahapan dalam membuat Daemon
1. Fork Parent Processs dan penghentian Parent Process
Langkah awal dalam pembuatan daemon adalah dengan membuat proses baru yang dilakukan dengan forking . Setelah proses terbentuk , matikan proses induk . Proses induk yang mati akan menyebabkan OS mengira proses telah selesai dan kembali ke terminal . Dari rangkaian proses diatas , kita akan mendapatkan hasil yang berupa proses anak yang meneruskan program setelah proses induknya mati . Hal ini dilakukan untuk mendapatkan proses yang bekerja pada background.
-------------------------------------------------------------------------------------------------------------------------
2. Mengubah mode file menggunakan UMASK(0);
umask merupakan sebuah command yang digunakan untuk menset hak akses dari file yang dibuat oleh proses yang berjalan saat itu . Jadi mengeset umask(0) akan membuat proses yang tidak memiliki batasan akses , dalam arti lain mempunyai akses penuh .
-------------------------------------------------------------------------------------------------------------------------
umask(0);
--------------------------------------------------------------------------------------------------------------------------
3. Membuat Unique Session ID (SID)
Dalam langkah kali ini , akan dilakukan pemanggilan fungsi setsid() yang digunakan agar proses anak memiliki sebuah SID baru . Hal ini dilakukan dikarenakan Daemon harus bekerja secara independen , termasuk proses yang menjalankannya .
-------------------------------------------------------------------------------------------------------------------------
sid = setsid();
if (sid < 0)
{
exit(EXIT_FAILURE);
}
--------------------------------------------------------------------------------------------------------------------------
4. Mengubah Directory Kerja
Direktory kerja yang aktid pada daemon diharuskan direktori yang selalu hidup. Hal ini dilakukan dengan fungsi chdir().
-------------------------------------------------------------------------------------------------------------------------
5. Menutup File Descriptor Standar
Agar tidak ada gangguan dari user , maka standar I/o harus ditutup. Hal ini dilakukan dikarenakan daemon tidaklah bergantung pada terminal maupun user . Terdapat 3 jenis standar I/O yaitu : STDIN ( Standar Input ) , STDOUT ( Standar Output ) , STDERR ( Standar Error ).
-------------------------------------------------------------------------------------------------------------------------
6. Membuat Loop utama (inti kerja dari daemon)
Dan yang terakhir dalam pembuatan daemon adalah dengan membuat looping yang akan selalu berjalan selama jangka waktu yang ditentukan.
-------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
Contoh Daemon Sederhana
PENJELASAN
Langkah awal dalam pembuatan daemon adalah dengan membuat proses baru yang dilakukan dengan forking . Setelah proses terbentuk , matikan proses induk . Proses induk yang mati akan menyebabkan OS mengira proses telah selesai dan kembali ke terminal . Dari rangkaian proses diatas , kita akan mendapatkan hasil yang berupa proses anak yang meneruskan program setelah proses induknya mati . Hal ini dilakukan untuk mendapatkan proses yang bekerja pada background.
-------------------------------------------------------------------------------------------------------------------------
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);
umask merupakan sebuah command yang digunakan untuk menset hak akses dari file yang dibuat oleh proses yang berjalan saat itu . Jadi mengeset umask(0) akan membuat proses yang tidak memiliki batasan akses , dalam arti lain mempunyai akses penuh .
-------------------------------------------------------------------------------------------------------------------------
umask(0);
--------------------------------------------------------------------------------------------------------------------------
3. Membuat Unique Session ID (SID)
Dalam langkah kali ini , akan dilakukan pemanggilan fungsi setsid() yang digunakan agar proses anak memiliki sebuah SID baru . Hal ini dilakukan dikarenakan Daemon harus bekerja secara independen , termasuk proses yang menjalankannya .
-------------------------------------------------------------------------------------------------------------------------
sid = setsid();
if (sid < 0)
{
exit(EXIT_FAILURE);
}
--------------------------------------------------------------------------------------------------------------------------
4. Mengubah Directory Kerja
Direktory kerja yang aktid pada daemon diharuskan direktori yang selalu hidup. Hal ini dilakukan dengan fungsi chdir().
-------------------------------------------------------------------------------------------------------------------------
if ((chdir("/")) < 0)--------------------------------------------------------------------------------------------------------------------------
{
exit(EXIT_FAILURE);
}
Agar tidak ada gangguan dari user , maka standar I/o harus ditutup. Hal ini dilakukan dikarenakan daemon tidaklah bergantung pada terminal maupun user . Terdapat 3 jenis standar I/O yaitu : STDIN ( Standar Input ) , STDOUT ( Standar Output ) , STDERR ( Standar Error ).
-------------------------------------------------------------------------------------------------------------------------
close(STDIN_FILENO);--------------------------------------------------------------------------------------------------------------------------
close(STDOUT_FILENO);
close(STDERR_FILENO);
Dan yang terakhir dalam pembuatan daemon adalah dengan membuat looping yang akan selalu berjalan selama jangka waktu yang ditentukan.
-------------------------------------------------------------------------------------------------------------------------
while(1)--------------------------------------------------------------------------------------------------------------------------
{
sleep(23);
}
exit(EXIT_SUCCESS);
--------------------------------------------------------------------------------------------------------------------------
Contoh Daemon Sederhana
PENJELASAN
Daemon diatas akan menampilkan sebuah notif yang bertuliskan Love_Your_Life setiap 23 detik sekali.
Cara Menjankan Program Daemon
PENJELASAN
Pertama kita diharuskan untuk mengcompile daemon (.c) yang kita buat , caranya dengan menuliskan "gcc (nama_daemon).c -o (nama_program)" pada terminal.
Misal daemon yang kita punya adalah lapres.c dan akan dicompile menjadi program yang bernama lapres.
Contoh :
-------------------------------------------------------------------------------------------------------------------------
-gcc lapre.c -o lapres
--------------------------------------------------------------------------------------------------------------------------
Setelah itu jalankan program lapres dengan cara ./(nama_program)
Contoh :
-------------------------------------------------------------------------------------------------------------------------
./lapres