Chapter sebelumnya memperkenalkan nice value sebagai tuas prioritas; sekarang kita pegang tuasnya. Linux menyediakan dua perintah yang bekerja pada fase hidup proses yang berbeda: nice mengatur prioritas pada saat proses dilahirkan, sedangkan renice mengubah proses yang sudah berjalan. Yang kedua ini menyelamatkan kita pada situasi nyata: kompresi video yang tadi tampak wajar ternyata membuat laptop tersendat-sendat, dan kita tidak ingin memulainya dari nol. Sepanjang chapter ini kita membuktikan setiap perubahan dengan membaca kembali kolom NI lewat ps, tanpa sekali pun mencetak PID yang nilainya selalu berganti antar eksekusi.
Menjalankan Proses dengan nice #
Bentuk dasarnya sederhana: nice -n N perintah, dengan N adalah nice value yang kita inginkan. Tanpa nice, proses baru lahir dengan nilai bawaan 0. Blok berikut membandingkan keduanya secara langsung — satu sleep biasa dan satu sleep yang lahir dengan nice 10:
sleep 60 &
tanpa_nice=$!
nice -n 10 sleep 60 &
dengan_nice=$!
echo "sleep tanpa nice -> NI=$(ps -o ni= -p "$tanpa_nice" | tr -d ' ')"
echo "sleep nice -n 10 -> NI=$(ps -o ni= -p "$dengan_nice" | tr -d ' ')"
kill "$tanpa_nice" "$dengan_nice"Output yang Dihasilkan:
sleep tanpa nice -> NI=0
sleep nice -n 10 -> NI=10Mari kita telaah blok di atas:
- Baris 1 (
sleep 60 &): melahirkan prosessleepbiasa di background, tanpa pengaturan nice apa pun. - Baris 2 (
tanpa_nice=$!): menangkap PID-nya ke variabel — PID disimpan untuk dipakaipsdankill, bukan untuk dicetak. - Baris 3 (
nice -n 10 sleep 60 &): melahirkansleepkedua dengan nice10. - Baris 4 (
dengan_nice=$!): menangkap PID proses kedua ke variabeldengan_nice. - Baris 5-6 (
echo ... ps -o ni= ...): membaca kolomNImasing-masing proses;tr -d ' 'memangkas spasi rata-kanan bawaanpsagar hasilnya rapi, dan nilai0serta10terbukti berbeda sesuai cara kelahirannya. - Baris 7 (
kill ...): membereskan kedua proses percobaan sekaligus.
Nilai nice bersifat menurun kepada keturunan: proses yang kita jalankan dengan nice -n 10 akan melahirkan proses anak yang juga membawa nice 10. Perilaku ini membuat nice cocok untuk membungkus satu sesi kerja utuh, seperti pada tabel berikut:
| Kebutuhan | Perintah contoh | Nice hasil |
|---|---|---|
| Kompresi besar di background | nice -n 19 tar czf arsip.tar.gz data/ | 19 |
| Build proyek sambil bekerja | nice -n 10 make -j4 | 10 |
| Pekerjaan normal | make test | 0 |
| Prioritas di atas bawaan (root) | sudo nice -n -5 ./simulasi | -5 |
Mengubah Proses Berjalan dengan renice #
renice bekerja setelah proses berjalan. Sintaksnya: renice -n N -p PID, dengan N adalah nilai nice baru — angka pengganti, bukan tambahan. Mari kita jalankan siklus lengkapnya: lahirkan sleep dengan nice 10, baca nilainya, ubah ke 15, baca lagi, lalu bunuh:
nice -n 10 sleep 60 &
pid=$!
ni_awal=$(ps -o ni= -p "$pid" | tr -d ' ')
renice -n 15 -p "$pid" > /dev/null
ni_akhir=$(ps -o ni= -p "$pid" | tr -d ' ')
kill "$pid"
echo "NI saat lahir : $ni_awal"
echo "NI setelah renice: $ni_akhir"Output yang Dihasilkan:
NI saat lahir : 10
NI setelah renice: 15Mari kita telaah blok di atas:
- Baris 1-2: melahirkan
sleepdengan nice10di background lalu menangkap PID-nya ke variabelpid. - Baris 3 (
ni_awal=$(...)): menyimpan nilaiNIsaat ini ke variabel, sebagai titik sebelum perubahan. - Baris 4 (
renice -n 15 -p "$pid" > /dev/null): mengganti nice proses itu menjadi15.renicesebenarnya mencetak baris konfirmasi berisi PID lama dan nilai lama-baru ke stdout — baris itu dialirkan ke/dev/nullkarena PID-nya berbeda di setiap eksekusi. - Baris 5 (
ni_akhir=$(...)): membaca nilaiNIsetelah perubahan. - Baris 6-8: membereskan proses percobaan, lalu mencetak kedua nilai berdampingan sebagai bukti.
Hasilnya 10 berubah menjadi 15 — prioritas proses turun tanpa perlu mematikannya. Satu pertanyaan mungkin muncul: mengapa demo ini mengubah 10 ke 15, bukan ke 5? Jawabannya aturan yang sudah kita kenal di chapter sebelumnya: user biasa hanya boleh menaikkan angka nice.
Untuk menemukan PID proses yang mau diubah, kita bisa memakai ps aux | grep nama atau membaca output pgrep -f pola. Setelah PID di tangan, pola tiga langkahnya selalu sama: baca NI, renice, baca lagi untuk memastikan perubahan diterima kernel. Detail kedua perintah ini — termasuk opsi untuk mengubah seluruh group proses — terdokumentasi di alaman manual nice(1)
dan renice(1)
.
Kita kini bisa melahirkan proses dengan prioritas pilihan dan menggesernya kapan pun. Namun mengubah prioritas hanyalah setengah cerita — kita juga perlu mengamati efeknya secara terus-menerus. Untuk itulah Chapter Process Monitoring
memperkenalkan watch, pstree, dan isi direktori /proc.