Proses Linux: memeriksa, menjeda, melanjutkan, dan menghentikan

Untuk mengelola proses Linux, kenali program yang berjalan, periksa status dan pemakaian sumber dayanya, lalu kirim sinyal hanya jika diperlukan. ps memberikan gambaran pada satu saat, sedangkan top memperbarui tampilannya secara berkala. Untuk mengakhiri proses, mintalah penghentian normal terlebih dahulu dengan TERM. Gunakan KILL, yang tidak dapat ditangkap oleh program, sebagai pilihan terakhir setelah langkah yang lebih aman gagal.

Panduan ini melatih pemeriksaan status proses, pengendalian pekerjaan shell, dan penggunaan sinyal. Pergantian induk, proses zombie, serta namespace PID dibahas dalam penjelasan PID dan PPID.

Membedakan proses dan pekerjaan shell

Proses adalah satu instans program yang sedang berjalan dan mempunyai PID (process ID atau ID proses). PPID (parent process ID atau ID proses induk) mengidentifikasi induknya saat ini. Pekerjaan atau job adalah satuan yang dilacak oleh sebuah shell dan dapat berisi lebih dari satu proses. Pengenal pekerjaan seperti %1 berlaku dalam pengendalian pekerjaan shell tersebut dan berbeda dari PID yang dipakai sistem untuk mengenali proses.

Sebagian proses menjadi bagian dari layanan, tetapi tidak semua proses merupakan layanan. Sebelum menghentikan satu proses layanan, periksa status serta log melalui pengelola layanannya. Latihan ini berfokus pada mengamati dan mengendalikan proses latihan milik akun Anda sendiri. Contoh menggunakan Bash serta perintah ps, top, dan pgrep dari procps-ng di Linux; opsi pada implementasi lain dapat berbeda.

Memilih kolom yang berguna dengan ps

ps melaporkan proses pada saat perintah itu dijalankan. Untuk tampilan seluruh sistem, menentukan kolom secara eksplisit memudahkan perbandingan PID, induk, pengguna pemilik, status, waktu yang telah berlalu, dan perintah. Daftar lengkap dapat panjang, sehingga persempit ke PID atau program yang diketahui jika memungkinkan.

ps -eo pid,ppid,user,stat,etime,args
ps -eo pid,ppid,user,%cpu,%mem,stat,args --sort=-%cpu | head

Contoh kedua mengurutkan berdasarkan pemakaian CPU yang dilaporkan, dari terbesar ke terkecil, lalu menampilkan baris-baris awal. Nilai CPU dipengaruhi cara dan waktu pengukurannya. Pada ps procps-ng, persentase CPU dihitung sepanjang masa hidup proses, sehingga bukan semata-mata beban pada saat tampilan diambil. Satu cuplikan belum membuktikan penyebab perlambatan.

Karakter pertama STAT biasanya menunjukkan status utama: R berarti sedang berjalan atau siap dijalankan; S berarti menunggu dan dapat diinterupsi; D berarti menunggu tanpa dapat diinterupsi, biasanya terkait masukan/keluaran; T berarti dihentikan sementara; dan Z berarti anak telah berakhir tetapi induknya belum mengambil status keluarnya, yaitu keadaan zombie. Karakter tambahan dapat menunjukkan sifat lain.

Mengamati perubahan dengan top dan mencari kandidat dengan pgrep

top memperbarui daftar proses serta angka pemakaian sumber daya secara berkala. Urutan dan nilai yang ditampilkan bergantung pada konfigurasinya. Tekan q untuk keluar. Gunakan tampilan ini ketika Anda ingin melihat kecenderungan perubahan, bukan berulang kali menjalankan ps.

top

pgrep dapat mencari PID berdasarkan nama; opsi -a menyertakan baris perintah. Beberapa proses bernama mirip dapat muncul, dan sasaran dapat berakhir tepat setelah pencarian atau PID-nya dipakai kembali kemudian. Jangan menghentikan proses hanya karena sebuah nomor muncul dalam satu hasil pencarian.

pgrep -a sleep

Jika tidak ada hasil, mungkin tidak ada proses yang cocok, keterlihatan proses dibatasi, atau pola pencarian tidak sesuai. Untuk mengamati proses uji sendiri, PID yang dicatat shell pada latihan berikut memberikan sasaran yang lebih jelas.

Menjeda dan melanjutkan proses sendiri

Jalankan contoh berikut dalam Bash. sleep 300 & memulai proses yang menunggu selama 300 detik di latar belakang; $! berisi PID pekerjaan latar belakang yang baru dimulai. Jangan melatih sinyal ini pada proses pengguna lain atau layanan operasional. Tetap gunakan shell yang sama sampai latihan selesai agar PID latihan tetap tersedia.

sleep 300 &
practice_pid=$!
printf 'practice PID: %s\n' "$practice_pid"
ps -p "$practice_pid" -o pid,ppid,stat,etime,args
kill -STOP "$practice_pid"
ps -p "$practice_pid" -o pid,stat,args
kill -CONT "$practice_pid"
ps -p "$practice_pid" -o pid,stat,args

ps pertama seharusnya menunjukkan proses sleep yang memang Anda mulai. Setelah STOP, status biasanya diawali T; setelah CONT, status dapat kembali menjadi S atau keadaan lain. Hasil tepatnya bergantung pada waktu pengamatan. STOP menjeda eksekusi tanpa mengakhiri proses, sedangkan CONT melanjutkannya.

Meminta penghentian dengan TERM dan memeriksa hasilnya

Selesaikan latihan dalam shell yang sama. TERM adalah permintaan penghentian bawaan dan memberi program kesempatan menangani sinyal serta membereskan pekerjaannya. wait menunggu anak ini selesai dan mengambil status keluarnya. Karena proses berakhir akibat sinyal, wait dapat mengembalikan status bukan nol.

kill -TERM "$practice_pid"
wait "$practice_pid"
ps -p "$practice_pid" -o pid,stat,args

Jika ps terakhir hanya menampilkan tajuk atau melaporkan tidak ada proses yang cocok, proses latihan biasanya sudah berakhir. PID dapat dipakai kembali, sehingga kemunculan nomor yang sama jauh setelahnya tidak membuktikan bahwa prosesnya sama. Jika program menangani atau mengabaikan TERM, beri waktu dan periksa status serta lognya.

Pola kill -KILL PID tidak memberi proses kesempatan menangani sinyal atau melakukan pembersihan sendiri; PID pada pola ini harus diganti sasaran yang telah dipastikan. Penggunaan KILL dapat meninggalkan basis data, penulisan aktif, atau layanan dalam keadaan tidak konsisten. Pertimbangkan hanya jika identitas dan dampaknya jelas serta penghentian normal telah gagal. Pengiriman sinyal dibatasi oleh aturan izin; pengguna biasa umumnya hanya dapat mengirim sinyal kepada proses dengan identitas pengguna yang sesuai. Tugas berstatus D mungkin tidak langsung hilang meskipun sudah dikirimi sinyal paksa.

Pekerjaan foreground dan background dalam shell

Dalam Bash interaktif dengan pengendalian pekerjaan aktif, pola perintah & memulai pekerjaan di background atau latar belakang. jobs -l menampilkan nomor pekerjaan dan PID yang dilacak oleh shell saat ini, bukan semua proses komputer atau pekerjaan dari terminal lain. Jika pekerjaan yang berjalan di foreground atau latar depan dihentikan sementara dengan Ctrl+Z, bg %1 dapat melanjutkannya di latar belakang dan fg %1 membawanya kembali ke latar depan. Gunakan nomor pekerjaan yang benar dari keluaran jobs; jangan menganggap nomornya selalu 1.

jobs -l

Memulai program di latar belakang shell tidak menjadikannya layanan andal yang bertahan setelah keluar dari sesi. Sesi, masukan/keluaran, dan sinyal masih dapat memengaruhinya. Gunakan mekanisme pengelolaan layanan distribusi untuk proses server yang perlu dikelola terus-menerus.

Urutan diagnosis ketika proses bermasalah

  1. Gunakan ps atau pgrep untuk memastikan PID, perintah, pengguna pemilik, dan induk. Jangan menyimpulkan identitas hanya dari nama yang mirip.
  2. Gunakan top dan log terkait untuk mengetahui apakah pemakaian sumber daya berlangsung terus, proses hanya menunggu, atau memang ada galat.
  3. Periksa apakah proses dikelola sebagai layanan. Jika demikian, tinjau status dan log layanan sebelum mengubah satu proses anak.
  4. Jika proses milik Anda memang harus berhenti, mintalah penghentian dengan TERM dan beri waktu untuk pembersihan. Pilih tindakan tambahan hanya bila perlu.
  5. Periksa lagi dengan ps, lalu selidiki apakah proses dimulai ulang, masalah muncul kembali, dan apa penyebab dasarnya.

Dokumentasi resmi

Manual ps(1) menjelaskan kolom keluaran dan kode status. Lihat manual pgrep(1) untuk opsi pencarian serta manual kill(1) untuk pengiriman sinyal. Dokumentasi pengendalian pekerjaan GNU Bash membahas nomor pekerjaan, fg, bg, dan wait. Manual top(1) menjelaskan tampilan yang diperbarui secara berkala.