Memahami Proses

Berikut ini adalah hasil terjemahan saya dari salah satu artikel di situs MandrakeUser.org yang judulnya "Managing Process". Jika ada kesalahan dalam menerjemahkan mohon untuk di koreksi.

Pengenalan Proses

Proses merupakan suatu cara yang digunakan oleh Sistem Operasi modern dalam melakukan multi-tasking. Multi-tasking berarti bahwa komputer Anda menjalankan program (task) lebih dari satu pada waktu yang sama, bukannya menunggu hingga suatu task selesai dulu (seperti DOS). Proses-proses itu terjadwal. Hal ini merupakan suatu topik yang sangat kompleks dan biasanya Anda akan (terpaksa) berurusan dengan proses jika ada masalah.

'/proc'

Informasi mengenai proses yang sedang berjalan disimpan di filesistem '/proc', yang terdiri dari data kernel yang berubah-ubah secara real-time. Oleh karena bukan filesistem sungguhan seperti yang lainnya, data-datanya tidak memakan tempat di harddisk dan Anda tidak bisa menulisinya. Tetapi kita bisa menampilkan dan merubah informasi yang terdapat didalamnya (misalnya dengan cat).
Didalam '/proc', Anda akan menemukan banyak sekali direktori yang namanya terdiri dari angka-angka. Angka-angka ini yang disebut dengan 'process IDs' (PID). Jika Anda menampilkan salah satu direktori, Anda akan menemukan seperti 'cmdline', yang berisi perintah yang menjalankan proses tersebut, atau 'stat', yang terdiri dari kode dari proses tersebut.
Contohnya:
   # less /proc/553/cmdline
   bash

Yang berarti: 'Proses dengan PID 553 dimulai dengan perintah bash'.

'Prioritas'

Semua proses memiliki hak yang sama dalam pembagian sumber daya. Tetapi bisa diubah dengan perintah nice -n [value] [process]. Nilai negatif menambah prioritas. Hanya bisa dilakukan oleh 'root', sebaliknya nilai positif bisa dilakukan oleh siapa saja.
nice -n [value] [process] memulai proses dengan prioritas yang diberikan, perintah renice [prioritas] [PID] merubah prioritas dari proses yang sedang berjalan.

'init'

Pusat (ayah) dari semua proses adalah 'init'. Perintah pstree memperlihatkannya dengan jelas.
'init' mengendalikan proses mana yang akan dijalankan dan dihentikan, dan pada runlevel berapa, serta bertanggungjawab untuk membawa sistem ke runlevel tersebut. Jika Anda melakukan shutdown, Anda tinggal menyuruh 'init' untuk pindah ke runlevel 0. Sama dengan jika Anda mengetikkan shutdown -h now atau init 0.

Pewarisan/Inheritance

Anak dari 'init' bisa memiliki proses anak lagi. Jika Anda menjalankan program dengan mengetikkan namanya di baris perintah, program tersebut akan menjadi anak dari program yang menangani baris perintah. Dalam kebanyakan kasus, program ini adalah 'bash' ('Bourne-Again-SHell').
Satu hal penting yang harus diketahui bahwa anak-anak proses 'mewarisi' beberapa sifat dari ayahnya. Jika Anda menjalankan suatu proses dengan hak akses 'root', anak prosesnya juga akan memiliki hak yang sama.

Inheritance Dan 'login'

Sekarang Anda mungkin bertanya-tanya: 'Karena init berjalan dengan hak akses 'root', dan init merupakan ayah dari semua proses, apakah berarti bahwa semua proses dan program pada GNU/Linux memiliki akses root?'
Ternyata tidak. Disinilah peranan dari perintah 'login'. Lihatlah tampilan dari perintah pstree lagi. Anda akan melihat bahwa setiap proses dan program yang dimulai setelah boot adalah anak dari proses 'login'. 'login' merubah permission dari anak-anak proses ini tergantung dari bagaimana Anda login ke sistem. Jika Anda login sebagai 'root', semua anak proses akan memiliki hak 'root', jika login sebagai user biasa, akan-anak proses akan berjalan dengan permission ('UserID', UID) dari user tersebut. Sisanya ditujukan untuk keamanan dan kestabilan sistem. Jika Anda membutuhkan hak sebagai 'root', Anda bisa login menjadi 'root' dari account user dengan menggunakan perintah 'su' atau 'sudo'.

Inheritance Dan 'setuid'

Ada pengecualian dari hal diatas dimana proses/program berjalan dengan UID yang berbeda dari user yang menjalankannya. Proses atau program ini biasanya disebut dengan 'setuid'. 'setuid' merupakan program hack, mengganti program yang membutuhkan hak lain (biasanya lebih tinggi) yang bukan UID dari yang menjalankannya. Tetapi kadang-kadang diperlukan. Contoh yang paling sering adalah subsistem grafis, 'X'. 'X' membutuhkan hak sebagai 'root' untuk berjalan. Bagaimanapun, anak dari 'X' tidak berjalan sebagai 'root'. Bagaimana bisa?
'X' dijalankan melalui katakan saja wrapper (pembungkus), '/usr/X11/bin/Xwrapper'. Jika Anda lihat pada bit permission-nya, Anda akan melihat 'setuid root': -rws--x--x. Wrapper ini menangani bagian permission ketika memulai X, sehingga X sendiri tidak perlu menjadi 'setuid root'. Dia berjalan sebagai 'root' tetapi anak-nya tidak mewarisi UID-nya.

Menggunakan 'ps'

Tentu saja akan sangat merepotkan untuk melihat proses-proses dengan membaca file-nya di direktori '/proc'. Ada dua program yang bisa melakukannya: ps dan top. Keduanya mengambil semua informasi tentang proses di dalam direktori '/proc' dan mencetaknya dalam format yang mudah dibaca. Mungkin bagi orang yang belum mengerti, formatnya tidak begitu rapih. Sehingga, beberapa penjelasan mungkin akan membantu.
ps menyediakan tampilan statis dari proses yang diminta ketika ps dijalankan. ps sendiri tidak begitu membantu, karena Anda hanya akan melihat tampilan seperti ini:
   PID TTY TIME CMD
   546 pts/0 00:00:00 bash
   1138 pts/0 00:00:00 ps

Hanya itu, menampilkan informasi prosesnya sendiri yaitu 'parent'. Karena Anda menjalankan ps dari baris perintah, parent-nya adalah shell baris perintah (=program yang menerjemahkan perintah Anda, dalam kebanyakan kasus adalah 'bash').
Oleh karena itu ps mempunyai banyak sekali option. Untuk melihat semuanya ketik:
   ps auxf
Mengesankan bukan? ;-). Anda bisa menggunakan output redirection untuk membuat file yang berisi status dari proses yang sedang berjalan:
   ps auxf > status.txt
Beberapa penjelasan field dan nilai yang digunakan oleh 'ps':
bullet USER: nama user yang menjalankan proses ini atau atas ijin siapa dia berjalan. Bisa Anda lihat bahwa kebanyakan program yang berada paling atas adalah milik root: mereka bagian dari proses boot yang dijalankan oleh init, boot scheduler GNU/Linux. init adalah ayah dari semua proses pada sistem Unix.
bullet PID: ID proses
bullet %CPU: persentasi dari waktu CPU yang telah digunakan. Pada prosesor-prosesor modern kebanyakan proses akan berisi null, kecuali untuk X.
bullet %MEM: persentasi dari memori sistem yang digunakan oleh proses. Nilainya berhubungan dengan RSS, bukan VSZ.
bullet VSZ: ukuran memori virtual proses. 'besar memori' proses, termasuk shared libraries.
bullet RSS: Resident Set Size. Ukuran sebenarnya ('berat bersih'). Perlu dicatat biasanya nilainya lebih kecil dari nilai yang diberikan oleh 'top'. Karena berbeda dalam perhitungannya.
bullet TTY: terminal dari mana program dijalankan. Semua proses yang dijalankan oleh 'init' tidak mempunyai aturan terminal ini.
bullet STAT: status proses sekarang. S berarti 'sleeping', R kepanjangan dari 'running', W untuk 'no resident pages in memory', T untuk 'stopped', D untuk 'defunct' dan Z untuk 'Zombie'. STAT tidak bekerja dengan proses-proses kernel seperti kflushd. Proses defunct merupakan proses yang berjalan sembarangan. Kill saja secepat mungkin. 'Zombie' sepertinya tidak kelihatan baik, tapi tidak berpengaruh apa-apa pada sistem. Mereka akan dihilangkan pada shutdown berikutnya.
bullet TIME: tidak menunjukkan uptime tetapi cpu-time yang dihabiskan.

'ps' memiliki banyak sekali option untuk mengatur tampilan tersebut. Anda bisa mengurutkan tampilan berdasarkan field, menaik/menurun, hanya menampilkan proses dengan karakteristik tertentu, hanya menampilkan beberapa field, merubah format beberapa field, dsb. man ps akan menjelaskannya kepada Anda.

Menggunakan 'top'

top memberikan Anda tampilan dinamis dari status proses yang sedang berjalan. Dia menampilkan suatu tabel proses yang diupdate pada interval waktu tertentu (default: 5 detik). Pada bagian atas tabel ini ada keterangan mengenai status dari sumber daya sistem saat ini. Ada banyak program frontend untuk 'top' yang memiliki tampilan grafis yang cantik (seperti 'Task Manager' di KDE, 'System Monitor' di GNOME atau 'xosview' yang tradisional), tetapi saya lebih memilih program konsol yang aslinya. Tidak menghambat sumber daya sistem.
Mungkin top akan membingungkan pada awalnya, tetapi fasilitasnya bisa diatur sedemikian rupa sesuai kebutuhan Anda. Option yang paling penting adalah -d [sec], yang menentukan interval update dalam detik.
Setelah masuk ke top Anda bisa merubah jumlah field yang ditampilkan dan ukutannya dengan menekan tombol 'f' atau 'o'. Tombol yang bisa digunakan adalah 'AbcDgHIjklMnopqrsuzVyEFWX'. Lebih memusingkan dari kelihatannya: huruf kecil menentukan field yang tidak akan ditampilkan dan urutan huruf menjelaskan urutan dari field yang ditampilkan.
Cobalah sendiri dan jika Anda ingin menyimpan konfigurasinya, tekan tombol 'w' untuk menyimpan konfigurasi pada suatu file di direktori home Anda ('.toprc').
Pada tabel top ada beberapa istilah baru:
bullet PRI: prioritas proses. Waktu perhitungan maksimum dalam milidetik untuk proses ini.
bullet NI: nilai 'nice'. Lihat bagian sebelumnya.

Penyimpangan: Manajemen Memori di GNU/Linux

Bagian atas dari tampilan top mungkin terlihat seperti ini:
   42 processes: 41 sleeping, 1 running, 0 zombie, 0 stopped
   CPU states: 0.9% user, 1.3% system, 0.0% nive, 97.6% idle
   Mem: 257676K av, 252940K used, 4736K free, 202852K shrd, 7464K buff
   Swap: 130748K av, 256K used, 130492K free, 197620K cached
Yang biasanya membingungkan orang-orang adalah manajemen memori di GNU/Linux. Lihatlah pada:
   Mem: 257676K av, 252940K used, 4736K free, 202852K shrd, 7464K buff
   Swap: 130748K av, 256K used, 130492K free, 197620K cached
'Mem' menampilkan sekitar 252 MB RAM yang dimiliki. Kenyataannya 256 MB. Apa yang terjadi dengan sisanya yang 4 MB? Sederhana: mereka digunakan untuk 'shadowing' BIOS dan berisi kernel GNU/Linux.
Field berikut kelihatannya menandakan bahwa sistem sedang diambang kehabisan memori: hampir semua memori kelihatannya sedang digunakan. Apakah begitu? Tidak, tidak begitu. Jika Anda ingin mengetahui jumlah memori yang bebas, gunakan tool yang bersangkutan, free:
   $ free
   total used free [...]
   Mem: 257676 253624 4052 [...]
   -/+ buffers/cache: 50360 207316
   Swap: 130748 256 130492

(Output disingkat)
Lihatlah pada baris ketiga:
   -/+ buffers/cache: 50360 207316
Inilah nilai sebenarnya dari memori yang sedang digunakan (50 MB) dan memori bebas (202 MB). Sisanya digunakan untuk caching dan buffering, contoh untuk mempercepat sistem. GNU/Linux menggunakan memori sistem: memori 'bebas' hanyalah hardware yang tidak berguna.
Anda akan merasakan bahwa program yang membutuhkan banyak memori akan berjalankan lebih cepat jika dijalankan untuk keduakalinya pada sesi yang sama, inilah keuntungan dari manajemen memori GNU/Linux.

Mendeteksi dan Menghentikan Proses Yang Kacau

Ada banyak 'osmeters' di luar sana, yang akan menunjukkan apa yang terjadi pada komputer Anda. Beberapa dari mereka ada yang cepat tetapi nilai-nilainya dipertanyakan.
Percayalah, Anda akan merasakan penurunan kinerja sistem jika suatu proses berjalan tidak terkendali ;-). Contohnya adalah Netscape 4.x. Paling buruk, menekan CTRL-ALT-ESC (shortcut untuk 'xkill') untuk menghentikannya tidak akan bisadan proses tersebut akan terus menghabiskan sumber daya sistem.
Jika Anda merasakan penurunan kinerja, jalankan 'top' dan lihatlah pada baris kedua. Nilai dari user atau system akan bernilai 99%. Cari proses yang bersangkutan dan catat PID-nya. Tekan 'k' dan ketik PID yang Anda catat tadi. Tekan ENTER lagi. Itu akan melakukan kill -15(SIGTERM) pada proses, cara yang lebih baik untuk menunjukkan "jalan keluar" bagi program. Jika tidak bekerja, lakukan hal diatas sekali lagi, tetapi sekarang tekan '9' pada prompt kedua. kill -9(SIGKILL) akan lebih "membasmi" proses tersebut. Jika masih belum juga, cobalah hal yang sama tetapi sebagai root.
Kadang-kadang Anda ingin menghentikan suatu proses berdasarkan namanya, contohnya jika proses tersebut................Dalam hal ini, gunakan perintah killall -[signal] [name]. Option yang berguna untuk killall adalah -i yang akan mengkonfirmasikan dulu sebelum menghentikan proses, dan -w yang akan menunggu hingga proses tersebut dihentikan.
Tidak bisa mengingat PID-nya? Jika Anda tahu nama dari prosesnya, Anda bisa mengambil jalan pintas dengan perintah pidof dan command substitution seperti berikut:
   kill -15 $(pidof [namaproses])
Hal tersebut akan meminta PID dari proses dan dijadikan parameter untuk perintah kill.

Copyright LSTB (Tom Berger) and Mandrakesoft 1999-2001

Hosted by www.Geocities.ws

1