Pendahuluan
Berikut ini adalah artikel hasil terjemahan saya dari salah satu
artikel di situs MandrakeUser.org yang berjudul "Managing Process".
Jika ada kesalahan dalam penerjemahan tulisan ini harap dikoreksi
dan diinformasikan kepada saya melalui e-mail yang ada pada akhir
tulisan ini.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). Di dalam
'/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 di atas 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':
- 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.
- PID: ID proses
- %CPU: persentasi dari waktu CPU yang telah digunakan. Pada
prosesor-prosesor modern kebanyakan proses akan berisi null, kecuali
untuk X.
- %MEM: persentasi dari memori sistem yang digunakan oleh proses.
Nilainya berhubungan dengan RSS, bukan VSZ.
- VSZ: ukuran memori virtual proses. 'besar memori' proses, termasuk
shared libraries.
- RSS: Resident Set Size. Ukuran sebenarnya ('berat bersih'). Perlu
dicatat biasanya nilainya lebih kecil dari nilai yang diberikan oleh
'top'. Karena berbeda dalam perhitungannya.
- TTY: terminal dari mana program dijalankan. Semua proses yang
dijalankan oleh 'init' tidak mempunyai aturan terminal ini.
- 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.
- 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 diperbaharui pada
interval waktu tertentu (defaultnya: 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:
- PRI: prioritas proses. Waktu perhitungan maksimum dalam milidetik
untuk proses ini.
- 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, misalnya 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 berjalan 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 bisa dan 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. 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.
Diterjemahkan sekitar bulan September-Desember 2001.
Demikian tulisan terjemahan mengenai memahami proses pada linux. Semoga
bermanfaat bagi Anda semuanya. Jika ada saran atau komentar bisa
dilayangkan ke
arioss@softhome.net. Untuk membaca tulisan menarik lainnya
silakan menuju ke situs Sony AK Knowledge Center dengan alamat di
www.sony-ak.com.
Terimakasih.
| Send
your comments or suggestions |
|
|
|