Sekali lagi, saya mendapatkan gejolak hati yang dalam untuk membagikan ilmu saya tentang bash script.
Kali ini, akan dibahas proses daemon.
Apa itu daemon? Ya bentar,ini katanya mau dibahas.
Daemon adalah proses yang bekerja pada background dan tidak berinteraksi langsung dengan user melalui standar input output.
Daemon adalah sebuah proses yang didesain supaya proses tersebut tidak mendapatkan intervensi dari user. Daemon biasanya bekerja dalam jangka waktu yang sangat lama dan bertugas menerima request dan menjalankan responsnya.
Contoh dari daemon ini misalnya adalah Apache Web Server HTTP daemon. Daemon ini bekerja pada background dan menerima request HTTP pada port tertentu (biasanya 80 atau 8080) dan memberikan respon terhadap request tersebut, berdasarkan tipe dari request tersebut.
Adapun hal-hal yang membedakan daemon dengan proses lainnya adalah: daemon tidak memiliki parent proses ID, daemon tidak memiliki pengontrol baik itu STDOUT, STDIN, maupun STDERR, dan daemon berjalan dalam previlege super user.
Apa itu parent proses ID? Apa itu STDOUT,STDIN,dan STDERR?
Pertanyaan yang bagus kawan.
Ini saya copasin lagi.
PID adalah Berupa angka-angka yang dipakai dalam beberapa sistem operasi untuk mengindetifikasikan sebuah proses.
PPID adalah Merupakan PID yang bersifat Private, atau PID yang tidak langsung ditampilkan. Mengetahui parent process.
Child Proses merupakan sebuah proses yang diciptakan dari sebuah proses yang lain (parent process). Child process mewarisi atribut-atribur dari parent process seperti membuka file dari parent proses. Sebuah child process sebenarnya dibuat menggunakan fungsi fork() sebagai salinan dari parent processnya.
Parent Process merupakan proses yang telah menciptakan beberapa buah proses anak. Proses ini tercipta ketika mengeksekusi fungsi fork(), kemudian hasil dari pemggilan fork tersebut akan menciptakan beberapa child process.
Zombie Process terjadi karena adaanya child process yang di exit namun parrent processnya tidak tahu bahwa child process tersebut telah di terminate, misalnya disebabkan karena putusnya network. Sehingga parent process tidak merelease process yang masih digunakan oleh child process tersebut walaupun process tersebut sudah mati.
STDIN adalah file handle yang membuat proses/program yang kamu buat membaca informasi dari user.
STDOUT membuat proses/program yang kamu buat ini bisa mengeluarkan informasi.
STDERR berfungsi untuk mengeluarkan error message dari program/proses yang dibuat.
Oke, bagaimana cara mbuat daemon kalo gitu?
.....Sungguh merepotkan sekali dirimu,kawan. Oke saya jelasin juga.
Ada beberapa proses untuk membuat daemon.
a. Forking dan pembunuhan Proses induk.
Langkah pertama dari pembuatan daemon adalah dengan menspawn proses menjadi induk dan anak dengan melakukan forking, kemudian membunuh proses induk. Proses induk yang mati akan menyebabakan sistem operasi mengira bahwa proses telah selesai sehingga akan kembali ke terminal user. Dari langkah tersebut kita akan mendaptkan sebuah proses anak yang melanjutkan program setelah induknya mati, sehingga kita mendapatkan sebuah proses yang hampir bekerja pada backround.
Contoh :
pid_t pid,sid;
pid=fork();
if(pid < 0)
{
exit(EXIT_FAILURE);
}
if(pid > 0)
{
exit(EXIT_SUCCESS);
}
umask(0);
b. Membuat proses bekerja secara independen
Daemon harus bekerja secara independen daripada proses-proses lain, termasuk juga proses yang menjalankannya. Langkah bisa dilakukan dengan memanggil fungsi setsid(), sehingga proses akan mendapatkan sebuah session ID yang baru.
Contoh :
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
c. Menutup standar I/O deskriptor yang diwarisi
Untuk mencegah terjadinya intervensi dari user serta untuk pengamanan, maka standar I/O descriptor dan descriptor yang diwarisi dari proses induk harus ditutup. Ada 3 jenis standar I/O descriptor : STDIN (standar input), STDOUT (standar output), STDERR (standar error).
Contoh:
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
d. Melakukan masking pada File Creation
Sebagian besar daemon bekerja dalam previlege super user. Daemon biasanya memproteksi setiap file yang dibuat, dengan alasan keamanan. Fungsi umask() akan mencegah file-file previleges yang tidak aman dalam setiap pembuatan file.
Contoh :
pid_t pid,sid;
pid=fork();
if(pid < 0)
{
exit(EXIT_FAILURE);
}
if(pid > 0)
{
exit(EXIT_SUCCESS);
}
umask(0);
e. Running Directory
Directory kerja daemon haruslah sebuah directory yang selalu hidup. Bisa saja pada saat starting working directorynya pada saat itu berada pada user home. Karena daemon bekerja sampai sistem reboot, maka file sistem user directorynya takkan pernah bisa di unmount.
Contoh :
sid = setsid();
if(sid < 0)
{
exit(EXIT_FAILURE);
}
if((chdir(“/home/assassin/modul2/shift2.1/”)) < 0)
{
exit(EXIT_FAILURE);
f. Membuat Loop Utama
Daemon bekerja terus menerus sehingga diperlukan loop yang berfungsi.
Contoh :
while (1){
sleep(30);
}
exit(EXIT_SUCCESS);
Nah, itu dia. Saya capek copas terus. Oiya, sumber-sumbernya dari:
MODUL_02 bit.ly/pendahuluansisop2015
http://xvongola.blogspot.co.id/2011/12/daemon-dan-konfigurasi-proses-di-linux.html
Tadi itu nyopas semua? Ea, tau gitu gak kesini...
Yaudaaa keluaaarrr sana monyeet!
Sekian ilmu yang saya bagikan. Terimakasih semua. Love you all.
Tidak ada komentar:
Posting Komentar