Minggu, 18 Oktober 2015

tentang daemon

apa itu daemon?
                daemon adalah suatu proses yang dibuat untuk bekerja secara otomatis karena tidak memiliki terminal pengontrol dan melakukan pekerjaannya dibalik layar atau yang biasa disebut sebagai background process. daemon tidak berhubungan langsung dengan user (user interface).

bagaimana proses pembuatan daemon?
           fork parent process dan penghentian parent process
langkah awal untuk membuat daemon adalah dengan melakukan forking. apa fungsinya? agar process baru dibuat dan parent process nya mati. setelah proses induk mati sistem akan mengira bahwa proses telah selesai. sehingga kembali ke terminal user. dan yang melanjutkan program adalah child processnya. setelah itu, kita harus mengubah mode file menggunakan UMASK(0)
daemon akan menulis beberapa file termasuk logs. maka mode file tersebut harus disesuaika agar dapat ditulis dan dibaca dengan benar. caranya gimana? dengan umask (). selanjutnya buat Unique Session ID (SID). apa gunanya membuat SID? SID dibuat dari kernel agar dapat beroperasi. caranya adalah dengan menggunakan setsid(). nantinya, setsid() akan memiliki return tipe sama seperti fork(). lalu kita harus memastikan bahwa directori kerja yang aktif ada di tempat yang selalu ada. pakai fungsi chdir(). pembuatan daemon hampir selesai. selanjutnya kita harus menutup File Descriptor Standar. fungsi close()  digunakan untuk menutup file deskriptor standar. kita perlu melakukannya agar file deskriptor tidak berulang dan mengurangi potensi bahaya dalam hal keamanan. file deskriptor standar itu sendiri meliputi (STDIN,STDOUT,STDERR). inti dari kerja daemon adalah dengan membuat loop utama. hal ini dilakukan agar daemon bekerja dalam waktu yang ditentukan.



























































berikut adalah contoh soal dari modul 2 yang menggunakan daemon :


Uul adalah seorang programer handal dan berani. Suatu hari, dia ingin membuat sebuah virus bernama “Virus Quotes 2 Menit”, dimana virus tersebut terdiri dari file aplikasi virus dan daftar quotes dalam sebuah file bernama virus.txt. Jika virus ini ada dalam komputer anda, maka akan muncul pop-up dari semua isi file virus.txt yang terpisah dengan tanda delimiter koma (,) satu persatu setiap 2 menit sekali. Sebagai praktikan sisop yang pintar, bantulah Uul untuk membuat virus tersebut!
Penyelesaian : kita harus membuat virus dimana virus tersebut akan mengeluarkan pop up dari daftar yang ada di dalam virus.txt yang terpisah dengan tanda delimeter koma satu persatu setiap 2menit sekali.
langkah :
1.       Membuat virus.txt yang berisikan quotes yg akan di-pop-up, pisahkan dengan koma(,).
2.       Membuka virus.txt dan mengambil kata lalu dimasukkan ke variabel yg diinginkan (pop)
3.       Menggunakan strtok untuk memotong dengan koma
4.       Menggunakan zenity ( perintah agar bisa pop up)


Uul adalah seorang programer handal dan berani. Suatu hari, dia ingin membuat sebuah virus bernama “Virus Quotes 2 Menit”, dimana virus tersebut terdiri dari file aplikasi virus dan daftar quotes dalam sebuah file bernama virus.txt. Jika virus ini ada dalam komputer anda, maka akan muncul pop-up dari semua isi file virus.txt yang terpisah dengan tanda delimiter koma (,) satu persatu setiap 2 menit sekali. Sebagai praktikan sisop yang pintar, bantulah Uul untuk membuat virus tersebut!
Penyelesaian : kita harus membuat virus dimana virus tersebut akan mengeluarkan pop up dari daftar yang ada di dalam virus.txt yang terpisah dengan tanda delimeter koma satu persatu setiap 2menit sekali.
langkah :
1.       Membuat virus.txt yang berisikan quotes yg akan di-pop-up, pisahkan dengan koma(,).
2.       Membuka virus.txt dan mengambil kata lalu dimasukkan ke variabel yg diinginkan (pop)
3.       Menggunakan strtok untuk memotong dengan koma
4.       Menggunakan zenity ( perintah agar bisa pop up)


int main()
{
                FILE *pFile;
                char abc [100], pop[100];
                char *pch;
                //daemon
                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);
                }
                //membuka fie virus.txt
                pFile = fopen("virus.txt","r");
                fgets(pop,100,pFile) ;//ambil kata dr virus.txt
   if (pFile == NULL) perror ("Error opening file"); //kalo virus.txt kosong jadi error
while (1)
{
                strcpy(abc,pop);//copy dr pop ke abc
                pch = strtok(abc,",");//dipotong pake koma
                while (1)
                {
                                char temp[]="zenity --warning --text='";//ini perintah pop up
                                strcat(temp,pch); //gabungin zenity &kata
                               
                                strcat(temp,"'");//gabungin lagi koma atas
                                system(temp);
                                pch = strtok(NULL,","); //dikasih null biar lanjut ga diulang2
                                sleep(120); //quotes keluar setiap 120 detik sekali
                }
}
exit(EXIT_SUCCESS);
fclose(pFile);
}


Sabtu, 26 September 2015

tutorial 1



masalah Modul 1
Praktikum Sistem Operasi 2015

1.       Cayza diberi tugas oleh dosennya untuk merubah codingan program bilangan prima dari bahasa C ke bash script.
Input: baris pertama berisi bilangan n
Output: semua bilangan prima <= n
Contoh:
5
2 3 5

10
2 3 5 7
Bantulah cayza untuk menyelesaikan tugasnya ini!

Penyelesaian :
Kita harus memberi output semua bilangan prima <= n
Dengan cara membagi bilangan dengan bilangan sebelumnya hingga n

2.       Selain kuliah, Cayza juga merupakan seorang dokter praktik, dia memiliki 5 pasien yang harus rutin meminum obat. Sebagai dokter yg baik, Cayza ingin terus memantau sudah berapa jumlah obat yang sudah diminum oleh setiap pasien. Cayza harus mengunduh berkas "laporan minum obat pasien" yang berada di kantornya melalui alamat http://10.151.36.201/sisop/jadwal.txt. Setiap berkas yang diunduh otomatis diletakkan pada sebuah direktori yang namanya sesuai dengan tanggal bulan dan tahun saat ini dengan format dd_mm_yyyy (contoh: 11_12_2013). Berkasnya juga otomatis di-rename sesuai dengan jam, menit, dan detik ketika berkas tersebut diunduh dengan format HH_MM_SS (contoh: 17_18_19). Buatlah script untuk membantu Cayza dalam melakukan hal ini agar pekerjaannya berjalan lebih mudah hanya dalam sekali proses.

Penyelesaian :
-          Mendownload file dan memberi nama otomatis di-rename sesuai dengan jam, menit, dan detik ketika berkas tersebut diunduh dengan format HH_MM_SS (contoh: 17_18_19)
-          Setelah diunduh, file tersebut masuk ke direktori  dengan nama sesuai dengan tanggal bulan dan tahun saat ini dengan format dd_mm_yyyy (contoh: 11_12_2013).


3.       Dalam berkas tersebut terdapat lima waktu pasien mendatangi Cayza untuk check up. Setiap harinya, semua pasien diperbolehkan minum obat mulai jam 6 pagi hingga jam 12 malam dengan selang waktu 3 jam sekali. Cayza harus mengetahui jumlah obat yang telah diminum oleh setiap pasien hingga waktu pasien check up pada hari itu. Oleh karena itu dia harus menambahkan keterangan jumlah obat yang sudah diminum setiap pasien hingga  waktu check up pada berkas yang sudah diunduh sebelumnya. Buatlah script untuk membantu cayza dalam melakukan hal ini.
Contoh file setelah script dijalankan:
08:00:01 - Pasien A Sudah Minum 1 obat
10:30:34 - Pasien B Sudah Minum 2 obat
11:32:46 - Pasien C Sudah Minum 2 obat
15:30:10 - Pasien D Sudah Minum 4 obat
17:22:30 - Pasien E Sudah Minum 4 obat

Penyelesaian :
Kita harus menghitung obat yang sudah diminum oleh pasien. Obat dihitung mulai dari jam 6pagi hingga 12 malam. Berarti kita perhatikan jam yang mulai dari jam 6, lalu dibagi 3 dan dikurangi 1. Contoh jam 9
9:3= 3
3-1=2
Jawaban benar

4.       Setelah itu Cayza harus mengarsipkan folder berisi berkas yang sudah disunting dalam bentuk kompresi tar.gz. dengan format XZZ (X = kelas, ZZ = Nomor Kelompok), contoh: A01.tar.gz. Setiap kali terjadi pengarsipan, akan otomatis dicatat ke dalam log file dengan format nama file log_XZZ.txt (X = kelas, ZZ = Nomor Kelompok), contoh: log_A01.txt.

Penyelesaian :

Kita hanya diminta untuk mengarsipkan folder berisi berkas yang sudah disunting dalam bentuk tar.gz dan dengan format nama yang sudah ditentukan. Lalu setiap kali tejadi pengarsipan akan otomatis dicatat ke dalam log file dengan nama format file log_kelas kelompok.
Nah disini saya print berkas sudah di zip untuk menandakan bahwa berkas sudah di zip.