Sabtu, 17 Oktober 2015

Daemon :: Bikin Tampilan Laptopmu Lebih Rapi




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