Sabtu, 17 Oktober 2015

[HOWTO] Mencatat Proses yang sedang Berjalan

Kali ini, saya akan berbagi mengenai cara mencatat setiap proses yang sedang berjalan dari user yang sedang aktif. Namun untuk melakukan itu, pertama-tama kita buat daemon dahulu. Daemonnya adalah seperti ini :

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.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(10);
     }

    exit(EXIT_SUCCESS);
}
Jangan lupa untuk membuat daemon tsb dalam file ekstensi c.
Untuk mengetahui proses yang sedang berjalan dari user yang sedang login kita bisa mengetikkan ps ux di terminal. Namun karena kita akan membuatnya di C, kita tidak bisa mengetikkan ps ux begitu saja. Kita perlu memanggil system. Nah cara mudahnya sebenarnya kita bisa menambahkan system("ps ux > logfile.txt") di dalam while(1). Tapi, di sini saya akan membuatnya dengan memadukan bahasa C. Penulisannyapun juga akan tetap dimasukkan di dalam while(1).

char path[1024];

        FILE *fp = popen("ps ux", "r");
        FILE *out= fopen("home/vania/C06_log.txt", "w+");
        if (fp == NULL)
        {
            perror("popen: ");
            exit(EXIT_FAILURE);
        }
        while (fgets(path, sizeof(path), fp) != NULL)
            fprintf(out,"%s", path);


        pclose(fp);  
        fclose(out);  
        sleep(10);

popen di atas adalah untuk menjalankan process di system. Jadi, nantinya output dari process tsb akan dimasukkan ke dalam sebuah file txt dengan nama C06_log.txt dan menyimpannya di direktori tsb . Untuk kodingan keseluruhannya adalah sebagai berikut :

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.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) {
        char path[1024];

        FILE *fp = popen("ps ux", "r");
        FILE *out= fopen("home/vania/C06_log.txt", "w+");
        if (fp == NULL)
        {
            perror("popen: ");
            exit(EXIT_FAILURE);
        }
        while (fgets(path, sizeof(path), fp) != NULL)
            fprintf(out,"%s", path);


        pclose(fp);  
        fclose(out);  
        sleep(10);
    }

    exit(EXIT_SUCCESS);
}
Untuk menjalankan kodingan tersebut, di terminal kita ketikkan gcc -o proses proses.c (di sini saya menyimpan file tsb dengan proses.c). Lalu jalankan proses tsb dengan ./proses . Nantinya akan keluar C06_log.txt di direktori home dan akan terupdate setiap 10 detik. Jika ingin mengubah updateannya bisa diganti waktunya sesuai yang diinginkan di perintah sleep(). Jika ingin menghentikkan proses, bisa kita ketikkan pkill proses di terminal.
Sekian dan terima kasih.
Share:
Read More

Jumat, 25 September 2015

Berkenalan dengan Shell Scripting

Apa itu shell script? Shell script adalah sebuah plain text file yang isinya merupakan beberapa perintah.  Di sini, saya akan menunjukkan shell script untuk menampilkan bilangan prima. Untuk membuat itu, pertama-tama kita buka terminal yang ada di Linux. Lalu ketikkan nano diikuti dengan nama file yang ingin kita buat dengan ekstensi .sh.


setelah itu akan muncul seperti ini :


di tempat itu, kita akan mengetikkan kode seperti ini:

#!/bin/bash
x=$1
for i in `seq 2 $x` ;
do
    cek=0
    for j in `seq 2 $i` ;
    do
        if [ $(( i%j )) -eq 0 ]; then
            let "cek=$cek+1"
        fi
    done
    if [ $cek -eq 1 ]; then
        echo $i
    fi
done


Berikut adalah penjelasan dari shell script di atas :

#!/bin/bash
x=$1
--> kita menginputkan argumen pertama kita untuk disimpan di x
for i in `seq 2 $x` ; --> looping dari i=2 sampai x
do
    cek=0
--> penanda untuk bilangan prima
    for j in `seq 2 $i` ; --> looping dari j=2 sampai i
    do
        if [ $(( i%j )) -eq 0 ]; then
  --> mengecek jika i dibagi j sisa baginya 0
            let "cek=$cek+1" --> jika sisa baginya 0, cek tadi ditambah 1
        fi
    done
    if [ $cek -eq 1 ]; then
  --> jika cek = 1, maka bilangan tsb bilangan prima
        echo $i  --> menampilkan bilangan tsb
    fi
done

Program untuk menampilkan bilangan prima sudah jadi. Untuk menjalankannya, kita tutup dulu dengan menekan Ctrl+X, kemudian akan muncul kita mau save atau tidak, klik Y kemudian enter.
Setelah kembali ke tampilan awal tadi, kita ketikkan chmod +x prima.sh. Perintah itu digunakan agar kita dapat mengeksekusi file yang tadi kita buat. Untuk menjalankannya, kita tinggal mengetikkan ./prima.sh (angka yang diinputkan). Contoh: kita ingin mengetahui bilangan prima dari 1 sampai 10. Maka kita ketikkan ./prima.sh 10.


Yeay!! Program sudah berhasil dijalankan.
Sekian dan terima kasih :)
Share:
Read More