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:

bash
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:

text
sleep tanpa nice  -> NI=0
sleep nice -n 10  -> NI=10

Mari kita telaah blok di atas:

  1. Baris 1 (sleep 60 &): melahirkan proses sleep biasa di background, tanpa pengaturan nice apa pun.
  2. Baris 2 (tanpa_nice=$!): menangkap PID-nya ke variabel — PID disimpan untuk dipakai ps dan kill, bukan untuk dicetak.
  3. Baris 3 (nice -n 10 sleep 60 &): melahirkan sleep kedua dengan nice 10.
  4. Baris 4 (dengan_nice=$!): menangkap PID proses kedua ke variabel dengan_nice.
  5. Baris 5-6 (echo ... ps -o ni= ...): membaca kolom NI masing-masing proses; tr -d ' ' memangkas spasi rata-kanan bawaan ps agar hasilnya rapi, dan nilai 0 serta 10 terbukti berbeda sesuai cara kelahirannya.
  6. 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:

KebutuhanPerintah contohNice hasil
Kompresi besar di backgroundnice -n 19 tar czf arsip.tar.gz data/19
Build proyek sambil bekerjanice -n 10 make -j410
Pekerjaan normalmake test0
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:

bash
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:

text
NI saat lahir   : 10
NI setelah renice: 15

Mari kita telaah blok di atas:

  1. Baris 1-2: melahirkan sleep dengan nice 10 di background lalu menangkap PID-nya ke variabel pid.
  2. Baris 3 (ni_awal=$(...)): menyimpan nilai NI saat ini ke variabel, sebagai titik sebelum perubahan.
  3. Baris 4 (renice -n 15 -p "$pid" > /dev/null): mengganti nice proses itu menjadi 15. renice sebenarnya mencetak baris konfirmasi berisi PID lama dan nilai lama-baru ke stdout — baris itu dialirkan ke /dev/null karena PID-nya berbeda di setiap eksekusi.
  4. Baris 5 (ni_akhir=$(...)): membaca nilai NI setelah perubahan.
  5. 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.