Sabtu, 17 Oktober 2015

Belajar Linux lagi - Daemon dan Proses

Daemon dan Proses
Proses adalah suatu program yang sedang dalam keadaan di eksekusi
Cara membuat proses yaitu dengan cara menjalankan programnya, maka proses dari program tersebut akan berjalan juga

Daemon adalah proses yang berjalan dibalik layar dan berjalan sendiri dimulai saat linux booting dan berjalan. Proses ini menunggu permintaan dari proses lainnya, bila tidak ada request, maka berada dalam keadaan idle.

Langkah membuat daemon :
1. Lakukan Inisiai
  karena ini menggunakan bahasa c maka buat library yang dibutuhkan,di google banyak kok
#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>
2. Forking dan Pembunuhan proses induk
    Melakukan forking dengan melahirkan proses menjadi induk dan anak. lalu proses induknya dibunuh/dimatikan. proses induk dimatikan akan membuat proses menjadi selesai diterminal, maka proses anaknya bisa berjalan setelah induknya mati
pid_t pid, sid;
pid = fork();
    if (pid < 0) {
        exit(EXIT_FAILURE);
    }
    if (pid > 0) {
        exit(EXIT_SUCCESS);
    }
umask(0) // umask(0) berguna agar mendapat akses penuh dari file yang dibuat daemon.
3. Membuat Unique Session ID (SID)
    daemon itu proses yang bekerja secara independen dari pada proses-proses yang lain, maka dari itu dibutuhkan dengan memanggil fungsi setsid() agar proses mendapatkan session ID yang baru
sid = setsid();
    if (sid < 0) {
        exit(EXIT_FAILURE);
    }
    if ((chdir("/")) < 0) {
        exit(EXIT_FAILURE);
    }
4. Mengubah Directory Kerja
    Daemon selalu bekerja di balik layar jadi direktori kerja diamon haruslah sebuah direktori yang hidup (direktorinya tidak boleh hilang)
if((chdir(“/home/anndi/prak2/”)) < 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().
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
6. Membuat Perulangan
    Perulangan ini nanti akan berisi perintah (terserah kita) yang akan dijalankan secara realtime, dibutuhkan sebuah looping dan akan berjalan terus menerus sampai prosesnya di bunuh.
while (1) {
   sleep(20) ;
}
exit(EXIT_SUCCESS);
Program Fullnya
#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) {
    printf("Hello Word\n");
    sleep(20);
}
exit(EXIT_SUCCESS);
}
Cara Menjalankan program diatas yaitu tulis programnya dengan notepad/text editor atau menggunakan IDE seperti CodeBlock dll, save dengan tipe file .c kemudian buka terminal dan tuliskan perintah berikut
gcc nama_file.c -o nama_file (bisa sembarang nama)
perintah diatas kalo diprogram c namanya nge compile, jadi sebelum dijalankan compile terlebih dahulu

kemudian jalankan prosesnya
./nama file(sembarang nama)
lihat hasilnya, jika tidak terjadi sesuatu berarti programnya ada yang salah.

karena di awal tidak dibuka dengan pembukaan maka di akhir saya akan buat penutupan.
Yak cukup sekian dari postingan kedua ini, kurang sekurang kurangnya mohon maaf yang sebesar besarnya
Semoga Bermanfaat :)