Perintah jobs Bash di Linux: lihat pekerjaan, status, dan PID

Perintah jobs menampilkan pekerjaan latar belakang dan pekerjaan yang ditangguhkan yang dikelola oleh shell Bash saat ini. Daftar ini berasal dari tabel pekerjaan shell tersebut, sehingga pekerjaan dari terminal atau shell lain tidak otomatis muncul di dalamnya.

Satu pekerjaan dapat terdiri atas beberapa proses, misalnya rangkaian perintah dalam pipeline. Nomor pekerjaan seperti %1 berbeda dari process ID (PID), yaitu nomor identitas sebuah proses. Untuk memeriksa proses di luar tabel pekerjaan shell, gunakan ps dengan pilihan sasaran yang sesuai; ps juga tidak selalu menampilkan seluruh proses tanpa opsi pemilihan.

Sintaks dan shell yang digunakan

jobs [OPSI] [PENENTU_KERJA]

OPSI dan PENENTU_KERJA adalah penanda, bukan teks yang harus diketik. Tanpa penentu pekerjaan, jobs menampilkan pekerjaan yang tercatat dalam shell ini. Penentu seperti %1 membatasi tampilan pada pekerjaan nomor 1.

Jobs merupakan perintah bawaan shell. Pada Bash, gunakan type jobs untuk memeriksa perintah yang dipanggil dan help jobs untuk membaca bantuan versi yang terpasang. Opsi pada shell lain dapat berbeda.

Mulai dan periksa pekerjaan latar belakang

Buka terminal Bash interaktif dan jalankan semua langkah berikut di shell yang sama. Sleep adalah program uji yang hanya menunggu; contoh ini tidak memerlukan hak administrator.

sleep 120 &

Tanda & di akhir membuat sleep berjalan sebagai pekerjaan latar belakang selama paling lama 120 detik, sehingga shell dapat menerima perintah berikutnya tanpa menunggu sleep selesai. Bash interaktif biasanya menampilkan nomor pekerjaan dan PID ketika pekerjaan dimulai. Nilai keduanya bergantung pada shell dan proses yang sedang berjalan.

jobs

Hasil jobs memuat nomor pekerjaan, status, serta perintah yang dijalankan. Jika pekerjaan uji masih aktif, seharusnya terlihat baris sleep 120 dengan status Running. Jika sudah berlalu 120 detik, pekerjaan dapat sudah selesai; mulai pekerjaan uji baru bila ingin mengulangi pemeriksaan.

jobs -l

Opsi -l menambahkan PID agar nomor pekerjaan dapat dibandingkan dengan identitas proses. Catat nomor pekerjaan dari hasil sebenarnya sebelum memakai perintah yang mengubah atau menghentikannya. Jangan menganggap nomor 1 selalu menunjuk pekerjaan uji jika shell sudah mempunyai pekerjaan lain.

Baca nomor pekerjaan, PID, dan status

Berikut contoh kedua yang dapat dicoba secara terpisah. Jika sleep 120 dari latihan sebelumnya masih berjalan, keduanya dapat muncul di daftar yang sama; nomor pekerjaan contoh kedua mungkin bukan 1.

sleep 60 &
jobs -l

Contoh keluaran ilustratif, dengan nomor pekerjaan dan PID yang akan berbeda pada komputer Anda:

[1]+ 12345 Running  sleep 60 &
  • [1] menunjukkan nomor pekerjaan dalam shell ini. Untuk merujuknya pada perintah Bash yang menerima penentu pekerjaan, gunakan %1.
  • + menandai pekerjaan saat ini menurut pilihan shell. Tanda tersebut tidak berarti pekerjaan berhak administrator. Jika ada pekerjaan sebelumnya, Bash dapat menandainya dengan -.
  • 12345 adalah PID ilustratif untuk proses sleep pada contoh satu perintah ini, bukan angka untuk disalin sebagai sasaran.
  • Running menunjukkan pekerjaan berjalan menurut shell, bukan berstatus Stopped. Label ini tidak berarti proses sedang memakai CPU terus-menerus; sleep menunggu waktu berlalu.
  • sleep 60 & menunjukkan perintah latar belakang yang terkait dengan pekerjaan.

Pada pekerjaan pipeline, beberapa proses dapat terlibat. Opsi jobs -p menampilkan PID pemimpin kelompok proses pekerjaan, sedangkan parameter Bash $! menunjuk PID proses terakhir pada pipeline latar belakang terakhir. Jangan menyamakan semua nomor tersebut hanya karena nilainya sama pada contoh sleep tunggal.

Opsi jobs yang berguna

Opsi Hasil
-l Menambahkan PID pada informasi pekerjaan.
-p Menampilkan hanya PID pemimpin kelompok proses setiap pekerjaan.
-r Menampilkan hanya pekerjaan yang sedang berjalan.
-s Menampilkan hanya pekerjaan yang ditangguhkan.

Misalnya, jobs -r membantu melihat pekerjaan yang masih berjalan, sedangkan jobs -s memfilter pekerjaan yang dihentikan sementara. Tidak adanya keluaran dari filter tidak berarti seluruh sistem tidak mempunyai proses. Opsi dan penentu pekerjaan dijelaskan pada bagian jobs di SHELL BUILTIN COMMANDS dalam manual GNU Bash.

Selesaikan pekerjaan uji dan periksa kembali

Cara paling sederhana adalah membiarkan sleep selesai setelah waktu tunggunya. Jika perlu mengakhirinya lebih cepat, jalankan jobs -l, pastikan nomor pekerjaan dan perintahnya memang sleep uji Anda, lalu gunakan kill %1 hanya jika nomor 1 adalah pekerjaan tersebut. Ganti %1 dengan nomor pekerjaan sebenarnya; penentu pekerjaan dapat merujuk satu pipeline, bukan hanya satu proses.

Perintah bawaan kill pada Bash mengirim SIGTERM secara bawaan. Pengiriman sinyal dan selesainya pekerjaan merupakan dua hal yang berbeda; panduan kill untuk sinyal dan pemeriksaan proses menjelaskan perbedaannya. Untuk menunggu pekerjaan anak yang dikenal shell ini, gunakan wait %1 dengan nomor yang sudah diperiksa. Status bukan nol dapat terjadi ketika pekerjaan berakhir akibat sinyal.

Jika shell sudah memberitahukan penyelesaian dan menghapus entri pekerjaan, penentu %1 dapat tidak lagi berlaku. Untuk mengambil status anak yang masih diingat shell, gunakan wait PID dengan PID anak yang sebelumnya dicatat dari jobs -l. Ganti PID dengan nomor sebenarnya; wait tidak dapat menunggu sembarang proses dari shell lain.

Jalankan jobs lagi setelah pekerjaan selesai. Shell dapat menampilkan pemberitahuan seperti Done atau Terminated sebelum menghapus entri pekerjaan; daftar akhirnya tidak lagi memuat pekerjaan uji itu. Jangan mengirim sinyal lagi ke nomor lama tanpa pemeriksaan baru karena nomor pekerjaan dapat dipakai untuk pekerjaan lain.

Mengapa daftar pada shell lain berbeda?

Setiap shell mengelola tabel pekerjaannya sendiri. Menjalankan jobs di terminal lain atau lewat Bash baru tidak memperlihatkan daftar pekerjaan shell asal. Bahkan ketika program masih berjalan dan dapat ditemukan dengan ps, jobs pada shell baru dapat kosong.

Kendali pekerjaan biasanya aktif pada Bash interaktif dan tidak aktif secara bawaan pada shell noninteraktif. Hal itu tidak berarti shell noninteraktif selalu tidak dapat melacak perintah latar belakang: daftar jobs dan fasilitas kendali terminal seperti fg atau bg perlu dibedakan. Ketika kendali pekerjaan tidak aktif, gunakan PID untuk kill dan wait sesuai bantuan Bash, bukan mengandalkan penentu pekerjaan.

Tanda & sendiri juga tidak menjamin program bertahan setelah terminal atau shell ditutup. Jika memerlukan sesi yang dapat disambung kembali atau pekerjaan yang dikelola jangka panjang, pertimbangkan tmux atau pengelola layanan. Nohup dapat menjadi pilihan untuk penanganan SIGHUP, tetapi tidak menyediakan seluruh pengelolaan sesi atau layanan. Cakupan pekerjaan, pipeline, dan perilaku sinyal shell dijelaskan dalam bagian JOB CONTROL dan SIGNALS pada manual Bash tersebut.

FAQ

Mengapa jobs kosong sementara ps masih menampilkan proses?

Jobs hanya membaca tabel pekerjaan shell saat ini, sedangkan ps memilih proses dari informasi sistem. Proses yang dimulai atau dikelola shell lain tidak otomatis menjadi pekerjaan pada shell Anda.

Apakah %1 sama dengan PID 1?

Tidak. %1 adalah penentu pekerjaan nomor 1 dalam shell tersebut. PID adalah nomor identitas proses pada sistem; gunakan jobs -l untuk membandingkannya pada pekerjaan yang benar.