Minggu, 18 Oktober 2015

Process and Daemon

Definisi Proses dan Daemon

- Proses adalah program tunggal yang sedang dalam keadaan dieksekusi pada alamat virtual.
- Daemon adalah proses yang berjalan di balik layar (background) dan tidak berinteraksi langsung dengan user melalui standard input/output

PID (Process ID)

Suatu identitas unik berupa angka-angka yang dipakai dalam beberapa system operasi untuk mengindentifikasi sebuah proses.

PPID (Parent Process ID)

Parent Process ID. Induk dari Process ID (PID). Setiap proses memiliki satu induk proses (PPID). PPID adalah creator dari proses.

Macam-macam Proses


Parent Process

Proses yang menciptakan beberapa proses anak. Proses ini tercipta dengan mengeksekusi fungsi fork(), kemudian hasil dari pemanggilan fork tersebut menciptakan beberapa child process.Implementasi pembuatan forking parent (proses pembuatan child) :

Child Process

Proses yang dibuat oleh proses lainnya ( parent process ). Setiap proses bias membuat banyak proses anak tapi hanya akan memiliki satu parent process, kecuali unuk proses paling pertama yang tidak memiliki parent. Proses pertama yang dipanggil init dalam Linux, dimulai oleh kernel saat boot dan tidak pernah dihentikan.

Zombie Process

Proses pada system operasi yang telah telah menyelesaikan prosesnya tetapi terdapat pada entry proses. Zombie proses terjadi apabila child process diberi perintah kill atau prosesnya dihentikan, child proses kemudian memberikan signal SIGCHILD ke parent process, apabila parent proess tidak menghandle signal tersebut, maka child process tersebut akan menjadi Zombie Process. Sebenarnya proses telah berhenti namun seakan-akan tetap ada. Zombie process ditandai dengan <defunct>.

Orphan Process

proses yang terjadi apabila Parent processnya telah berhenti dieksekusi tetapi child process tetap berjalan


Cara Membuat Proses

Pembuatan proses adalah tinggal menjalankan programnya, maka proses nya akan berjalan juga

Cara Membuat Daemon


Ada 6 proses pembuatan Daemon:
1. Fork Parent Processs dan penghentian Parent Process
2. Mengubah mode file menggunakan UMASK(0);
3. Membuat Unique Session ID (SID)
4. Mengubah Directory Kerja
5. Menutup File Descriptor Standar
6. Membuat Loop utama (inti kerja dari daemon)

Proses Pembuatan Daemon


1. Fork Parent Process dan penghentian Parent Process

Langkah pertama adalah melakukan forking untuk membuat process baru kemudian mematikan Parent Process. Process induk yang mati akan membuat system mengira proses telah selesai sehingga akan kembali ke terminal user. Proses anak yang melanjutkan program setelah proses induk dimatikan

2. Mengubah mode file menggunakan UMASK(0);

Untuk menulis beberapa file (termasuk logs) yang dibuat oleh daemon, mode file harus diubah untuk memastikan bahwa file tersebut dapat ditulis dan dibaca secara benar. Pengubahan mode file menggunakan implementasi umask().

//mengubah mode file mask
umask(0); //mendapat akses penuh dari file yang dibuat daemon

3. Membuat Unique Session ID (SID)

Child Process harus memiliki unik SID dari kernel untuk dapat beroperasi. Sebaliknya, Child process menjadi Orphan Proses pada system. Tipe pid_t yang dideklarasikan pada bagian sebelumnya, juga digunakan untuk membuat SID baru untuk child process. Pembuatan SID baru menggunakan implementasi setsid(). Fungsi setsid() memiliki return tipe yang sama seperti fork().

4. Mengubah Directory Kerja

Directori kerja yang aktif harus diubah ke suatu tempat yang telah pasti akan selalu ada. Pengubahan tempat direktori kerja dapat dilakukan dengan implementasi fungsi chdir (). Fungsi chdir() mengembalikan nilai -1 jika gagal.

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 implemtasi fungsi close().

close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

6. Membuat Loop utama (inti kerja dari daemon)

Daemon bekerja dalam jangka waktu tertentu, sehingga diperlukan sebuah looping.


Contoh Implementasi Daemon

Membuat log dari process yang berjalan



Pembahasan kode:



Daemon ini menjalankan loop yang akan print semua proses yang dijalankan dengan username kita, dengan refresh interval(sleep) 1 detik.

Contoh file log hasil dari daemon tersebut:



Silakan dicoba. Semoga bermanfaat....