Hai haiiii, maaf ya jarang nge-post di sini ): lagi
sibuk sama tumpukan tugas nih....
Nah jangan khawatir, sekarang ini aku bakal
bagi-bagi ilmu lagi nih ke kalian lewat postingan ini.
By the way, Jangan
pernah bosen ya dengan postinganku yang kebanyakan isinya 'pengetahuan' dan
bukan curhatan-curhatan remaja jaman sekarang :v (*ngaca)
Now... aku pengen tau nih,
Apasih pikiran awal kalian kalo denger kata
'Daemon' ?
yap, pasti sebagian besar yang ada di pikiran
kalian adalah Linux.
Bener kok.. FYI, ini adalah lanjutan dari postingan
kemarin nih , bertema sama yaitu tentang Linux tapi berbeda topik aja.
Sekarang ini, yang bakal aku bahas yaitu mengenai
Daemon.
---- FYI ---
Daemon adalah proses yang berjalan di balik layar
(background) dan tidak berinteraksi langsung dengan user melalui standart
input/output.
Berikut adalah cara membuat Daemon: (ada 6 proses
nih)
1. Fork Parent Process dan penghentian Parent
Process
forking digunakan untuk membuat
proses baru kemudian mematikan Parent Process. Nah, proses
induk yang mati ini akan membuat
sistem mengira proses sudah selesai sehingga kembali ke
terminal user. Setelah itu,
proses anak lah yang akan melanjutkan program.
2. Mengubah mode file menggunakan UMASK(0);
Jadi, ini digunakan untuk
memastikan file yang dibuat oleh daemon dapat ditulis dan dibaca secara
benar.
3. Membuat Unique Session ID (SID)
Membuatnya yaitu dengan
implementasi setsid().
4. Mengubah Directory Kerja
Direktori kerja yang aktif harus
ditaruh ke tempat yang pasti akan selalu ada. Caranya yaitu dengan
implementasi fungsi chdir().
5. Menutup File Descriptor Standar
Caranya yaitu menggunakan
implementasi fungsi close().
6. Membuat Loop utama
Ini adalah inti kerja dari daemon.
Daemon bekerja dalam jangka waktu tertentu, so diperlukan
looping.
berikut ini code implementasi Daemon nya:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.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)
{
sleep(30);
}
exit(EXIT_SUCCESS);
}
Nah kan udah aku kasih tau nih
tentang konsepnya. Now, aku bakal ngasih contoh soal implementasinya ^_^
Check it out!
Contoh:
Aan menginginkan laptopnya
lebih berbeda dengan laptop lainnya, yaitu dengan membuat salah satu direktori
di laptopnya mengandung file .doc saja. Jadi, selain file yang berekstensi .doc
akan secara otomatis dipindahkan ke direktori lain.
Nah nih tahap-tahapnya:
1. Pertama-tama, bukalah
terminal Linux-mu.
tahap 1
2. Lalu, masuklah ke dalam Folder yang kamu inginkan dengan perintah "cd
namafolder". Apabila
kamu ingin mengetahui apa saja
isi di dalam folder, maka gunakan perintah "ls" .
tahap 2
3.
Setelah masuk ke folder yang kamu inginkan, buatlah dua buah folder baru di
dalamnya. Pertama
yaitu folder yang digunakan untuk menyimpan file .doc saja (Misal nama folder:
doc_only) dan
folder yang digunakan untuk menyimpan ekstensi lainnya (Misal nama folder:
non_doc). Lalu,
isilah folder doc_only itu dengan file-file bermacam ekstensi yaitu .txt , .jpg,
.pdf , dan lain-lain.
(Jangan khawatir, ini hanya digunakan untuk pengecekan eksekusi program
nantinya. Apakah
program itu berhasil atau tidak.) Dan biarkan isi folder non_doc itu kosong
yang nantinya akan
dilihat apakah folder non_doc akan terisi file-file berekstensi selain .doc
bikin folder doc_only dan non_doc
isi folder doc_only
isi folder non_doc
4. Buka kembali terminalmu, lalu buatlah program
dengan menggunakan perintah
"nano namafile.c"
--> bila ingin mengedit program di terminal langsung
"gedit namafile.c"
--> bila ingin mengedit program di text editor
penggunaan perintah nano dan gedit
tampilan ketika memilih perintah nano
ketika memilih gedit maka akan muncul di Text Editor
5. Lalu bikinlah isi program tadi. Disini,
menggukan code implementasi Daemon yang ada di
penjelasan awal-awal tadi. Jadi
hanya mengubah bagian dalamnya.
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
int main()
{
pid_t pid, sid;
pid = fork();
if (pid < 0)
{
exit(EXIT_FAILURE);
}
if (pid > 0)
{
printf("pid:
%d\n",pid); //digunakan untuk ngeprint
PID nya
exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if (sid < 0)
{
exit(EXIT_FAILURE);
}
if
((chdir("/home/delia/sisop/bab2")) < 0)
//artinya tujuan terakhirnya yaitu menuju direktori bab2
//nah
ini mah terserah kalian mau ke folder mana aja.
{
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDERR_FILENO);
while(1)
{
system("cd doc_only\nfind . -type f
! -name \'*.doc\' -exec mv {} ../non_doc/ \\;");
//artinya
masuk ke direktori doc_only , lalu find (temukan) type file yang berekstensi
selain .doc
//
kemudian exec (execute/lakukan) mv(move/pindah) file-file tersebut ke
folder non_doc
}
exit(EXIT_SUCCESS);
}
ini code di main nya
6.
Setelah itu tutuplah programmu dan kembali ke terminal. Nah, karena program
yang dibuat tadi
berekstensi .c , maka harus di-compile terlebih dahulu dengan perintah:
"gcc -o nama_terserah nama_file_program.c" lalu enter
tampilan perintah gcc -o
7. Lalu
jalankan program dengan perintah "./nama_file_program.c"
Kemudian bukalah folder doc_only dan non_doc serta lihatlah hasilnya.
Hasilnya akan jadi seperti ini:
tampilan perintah menjalankan program
isi folder doc_only
isi folder non_doc
8. Tahap
terakhir nih.. Kalo kalian pengen program itu jalan terus ya tahap ini jangan
dilakuin deh..
Nah buat kalian yang pengen nge-stop program tadi, caranya adalah dengan
perintah
"pkill nama_terserah"
maksudnya nama terserah ini yaitu nama yang sudah kalian bikin tadi.
Berhubung tadi aku bikin namanya no3 maka perintahnya "pkill no3"
tampilan perintah pkill
Yeeeeeeey,
berhasil kan? Alhamdulillah...
Sekian
dulu ya.. semoga postingan ini bermanfaat. Kapan-kapan lanjut lagi bahasan lain
:3
Oh ya,
Selamat mencoba dan semoga berhasil juga :3














Tidak ada komentar:
Posting Komentar