Senin, 27 Oktober 2014

Process Programming


A. Process ID (PID) pada Linux

     Setiap proses di Linux memiliki PID. PID terdiri dari 16 bit ineger yang keluar secara berurutan. Setiap proses juga memiliki parent process, kecuali proses init. Berikut contoh kode untuk mengetahui PID suatu proses :
#include<stdio,h>
#include<unistd.h>

int main()
{
   printf ("The process ID is %d\n",(int) getpid());
   printf ("The parent process ID is %d\n",(int) getppid());
   return 0;
}

B. Membuat Proses Baru (Child Process)

     Ada 3 cara untuk membuat proses melalui kode program, yaitu :
1. Fungsi system()

#include<stdlib.h>

int main()
{
   int return_value;
   return_value = system("ls -l/");
   return return_value;
}

     Tetapi fungsi system() tidak dianjurkan karena :
     a. Tidak portable
     b. Menghabiskan resource
     c. Berbahaya

2. Fork()
     Fork() adalah suatu proses yang membelah diri. Fork() akan menduplikasi proses yang ada. Proses hasil duplikasi disebut proses anak. Return value dari fork menentukan sedang ada di proses mana.
  •  >0 : ada di parent process, return value merupakan PID dari child process
  • =0 : ada di child process
  • <0 : error
3. Keluarga exec
     Ciri-ciri fungsi exec adalah mengganti program yang sedang berjalan pada suatu proses. Keluarga exec terdiri dari :
  • Execv
  • Execvp
  • Execve
  • Execlp
  • Execle

C. Signals

     Signal adalah sebuah event yang dikirimkan ke suatu proses oleh proses itu sendiri atau proses lain. Digunakan untuk mengirimkan notifikasi kepada suatu proses bahwa ada suatu event. Macam-macam signals antara lain :

SIGKILL : mengakhiri eksekusi program sekarang juga
SIGTERM : mengakhiri eksekusi program
SIGSEGV : diterima ketika program melakukan segmentation violation
SIGSTOP : menghentikan sementara suatu proses sekarang juga
SIGCONT : melanjutkan kembali program yang di-stop
SIGINT : interrupt ke suatu proses
    Untuk mengirimkan signal ke proses bisa menggunakan perintah kill (ex : kill -SIGKILL pid) atau menggunakan system call kill() (ex : int kill(pid_t pid, int sig);)

D. Menunggu Berakhirnya Proses (wait() system call)

     Agar proses induk bisa menunggu proses anaknya selesai, kita harus menggunakan systemcall wait(). wait() akan memblok eksekusi program sampai salah satu child process selesai. Definisi fungsi :

#include <sys/types.h>
#include<sys/wait.h>
pid_t wait (int *status);
pid_t waitpid(pid_t pid, int *status, int options);


0 komentar:

Posting Komentar