Rabu, 05 November 2014

"Process Programming" pada Linux

Sebuah Sistem Operasi pasti mempunyai pembeda antar proses satu dengan yang lainnya. Pembeda tersebut dapat kita sebut dengan PID (Process ID). PID berupa sebuah angka (integer) yang membedakan setiap proses berjalan dalam Sistem Operasi tersebut. Pun jika kita ingim menghubungkan dua proses atau lebih, PID disini sangat berperan penting untuk mengidentifikasi sebuah proses yang berjalan pada Sistem Operasi.

Selain itu, PID juga berguna untuk membuat sebuah "Child Process" di dalam Sistem Operasi, terutama Sistem Operasi Linux. Child process harus dibuat oleh sebuah parent secara identik. Karena child process akan memenuh perintah dari superuser sebuah Sistem Operasi. Child process juga dapat mencegah hal-hal yang tidak diinginkan sebuah Sistem Operasi seperti keterbataan penggunaan memori dan lain sebagainya.

Terdapat tiga cara untuk membuat chil process (proses baru) di dalam Sistem Operasi Linux, yaitu :


1. Fungsi system()
2. System call fork()
3. Fungsi exec* family

1. Fungsi system()
Atau fungsi bernama system(). Merupakan perintah yang menjalankan shell command. Digunakan kode program :

#include<stdlib.h>
int system(const char* string);

Membuat child process menggunakan fungsi system() sangat tidak disarankan. Disamping fungsi ini tidak portable, fungsi system() juga menghabiskan banyak sumber daya di dalam Sistem Operasi dan berbahaya jika terdapat perintah yang salah.

2. System call fork()
Fork() adalah cara lain untuk membuat suatu child process. Dan child process tersebut identik dengan parent process nya (seperti kasus bakteri yang membelah diri). Digunakan kode program :

#include <unistd.h>
pid_t fork(void);
pid_t vform(void);

Setiap menjalankan sebuah fungsi fork(), akan terdapat return value yang akan kita peroleh:

  • Return value > 0 : Berada di parent process, return value merupakan PID
  • Return value = 0 : Berada di child process
  • Return value < 0 : Terjadi error
3. Exec* family 
Merupakan fungsi yang juga digunakan untuk membuat suatu child process. Ciri-ciri nya yaitu mengganti program yang sedang berjalan (sama seperti fungsi system()), tapi penggunaan Exec* family lebik baik dalam hal sumber daya dibanding menggunakan fungsi system().

Adapun varian dari fungsi exec() itu sendiri diantaranya :

1. Fungsi yang memiliki huruf p(execvp, execlp) 
Kedua fungsi ini mencari file executable pada tiap path yang terdapat didalam environment variable PATH. Namun, apabila terdapat karakter slash “/” pada argumen pertama, maka PATH akan diabaikan.

2. Fungsi yang memiliki huruf v(execvp, execv, execve) 
Fungsi – fungsi ini menerima argumen untuk program yang akan dieksekusi sebagai NULL-terminated array pointer ke string. Dan element terakhir dari array ini harus NULL.

3. Fungsi yang memiliki huruf l(execl, execle, execlp) 
Fungsi – fungsi ini menerima argumen untuk program yang akan dijalankan menggunakan mekanisme varargs dari bahasa C.
Misalnya: arg0,arg1,arg2,arg3,argn…

4. Fungsi yang memiliki huruf e di akhir nama 
Fungsi – fungsi ini menerima argument terakhir sebagai environment variable, argument ini bertipe array dari pointer ke string. Dan tiap string harus berbentuk seperti ini -> “VARIABLE=value”. Dan element terakhir dari array ini harus NULL

Tidak ada komentar:

Posting Komentar