Perintah fg Bash di Linux: bawa pekerjaan ke latar depan

Perintah fg pada Bash membawa pekerjaan latar belakang atau pekerjaan yang ditangguhkan ke latar depan terminal. Gunakan fg ketika pekerjaan dalam shell yang sama perlu kembali menerima masukan terminal atau Anda ingin menunggu pelaksanaannya secara langsung.

Setelah fg memilih pekerjaan, Bash menunggu sampai pekerjaan itu selesai atau ditangguhkan lagi sebelum menampilkan prompt berikutnya. Sasaran fg adalah penentu pekerjaan shell, misalnya %1, bukan sembarang process ID (PID) dari sistem. Periksa nomornya melalui jobs dan informasi PID pekerjaan.

Sintaks dan prasyarat

fg [%NOMOR_PEKERJAAN]

NOMOR_PEKERJAAN adalah penanda yang diganti nomor dari jobs. %1 merujuk pekerjaan nomor 1 dalam shell saat ini, bukan PID 1. Satu pekerjaan dapat terdiri atas beberapa proses, misalnya sebuah pipeline.

Latihan berikut menggunakan Bash interaktif dengan kendali pekerjaan yang aktif. Gunakan type fg dan help fg untuk memeriksa perintah bawaan serta bantuan versi setempat. Bash noninteraktif biasanya tidak mengaktifkan kendali pekerjaan secara bawaan, sehingga menjalankan fg dari skrip atau shell baru tidak otomatis mengakses tabel pekerjaan shell asal.

Siapkan dan periksa pekerjaan uji

Pada terminal Bash, mulai pekerjaan uji dengan sleep 60 &. Sleep menunggu, sedangkan tanda & membuat shell dapat segera menerima perintah lain. Jalankan langkah berikut di shell yang sama sebelum pekerjaan selesai.

jobs -l

Anda seharusnya melihat baris sleep dengan nomor pekerjaan, PID, serta statusnya. Pastikan nomor dan perintah tersebut memang pekerjaan uji Anda. Jika shell sudah mempunyai pekerjaan lain, sleep mungkin bukan pekerjaan nomor 1. Jika sleep sudah selesai, mulai pekerjaan uji baru dan periksa nomor yang terbaru.

Bawa pekerjaan yang dipilih ke latar depan

fg %1

Ganti %1 dengan penentu pekerjaan sleep yang baru diperiksa. Prompt tidak langsung kembali ketika sleep masih menunggu: shell sedang menunggu pekerjaan latar depannya. Tidak munculnya teks tambahan bukan berarti fg gagal, karena sleep tidak mempunyai tampilan interaktif.

Untuk latihan sleep, Anda dapat membiarkannya selesai secara alami. Pada pengaturan terminal biasa, Ctrl+Z menangguhkan pekerjaan latar depan dan mengembalikan prompt, sedangkan Ctrl+C mengirim permintaan interupsi, biasanya melalui SIGINT. Respons program terhadap interupsi dapat berbeda, jadi jangan menganggap semua aplikasi pasti langsung berakhir atau menyimpan pekerjaannya.

jobs

Jalankan jobs setelah prompt kembali. Jika memakai Ctrl+Z, pekerjaan uji biasanya tercatat sebagai Stopped dan masih dapat dilanjutkan. Jika selesai atau berakhir, Bash dapat menampilkan pemberitahuan penyelesaian lalu menghapus entri pekerjaan. Jangan menganggap nomor lama tetap menunjuk pekerjaan yang sama.

Urutan jobs lalu fg

Urutan ringkas ini dipakai ketika ada pekerjaan latar belakang atau pekerjaan yang ditangguhkan pada shell tersebut. Jika latihan sebelumnya sudah menyelesaikan sleep, buat pekerjaan uji baru terlebih dahulu.

jobs
fg %1

Baca hasil jobs sebelum menjalankan baris fg dan ganti %1 sesuai sasaran. Pekerjaan yang sedang berjalan dibawa ke latar depan; pekerjaan yang ditangguhkan dilanjutkan di latar depan. Berbeda dengan bg untuk melanjutkan di latar belakang, fg membuat pekerjaan mendapat posisi latar depan terminal dan membuat shell menunggunya.

Untuk program layar penuh, tampilan yang kembali bergantung pada programnya. Misalnya, bila Vim tersedia, Anda dapat membuka berkas uji yang aman dengan vim notes.txt, menangguhkannya dengan Ctrl+Z, memeriksa jobs, lalu menggunakan fg dengan nomor pekerjaan Vim yang sebenarnya. Pilih nama berkas uji yang tidak bertabrakan dengan dokumen penting. Layar editor dapat muncul kembali; tidak ada satu baris keluaran tetap yang berlaku untuk semua program.

Penentu pekerjaan yang dapat dipakai

Bentuk Makna
%N Memilih pekerjaan nomor N pada shell ini.
%+ Memilih pekerjaan saat ini menurut pilihan shell.
%- Memilih pekerjaan sebelumnya menurut pilihan shell.
Tanpa argumen Fg memakai pekerjaan yang dianggap sebagai pekerjaan saat ini.

Tanda + dan - pada keluaran jobs membantu mengenali pekerjaan saat ini dan sebelumnya. Pilihan tersebut dapat berubah ketika pekerjaan dimulai, ditangguhkan, dilanjutkan, atau selesai. Untuk sasaran tertentu, gunakan nomor yang baru diperiksa daripada mengandalkan catatan lama.

Kegagalan fg dan status keluar

Fg dapat gagal jika kendali pekerjaan tidak aktif, penentu pekerjaan tidak ditemukan, atau pekerjaan dimulai tanpa kendali pekerjaan. Periksa pesan kesalahan dan daftar jobs pada shell yang sama. Pekerjaan terminal lain tidak dapat diambil alih hanya dengan memasukkan PID-nya ke fg.

Status keluar fg mengikuti status perintah yang dibawa ke latar depan. Karena itu, status bukan nol tidak selalu berarti fg gagal memilih pekerjaan: programnya sendiri dapat berakhir dengan status bukan nol. Periksa pesan dan hasil program untuk membedakan kegagalan pemilihan pekerjaan dari hasil pelaksanaannya.

Fg mengatur posisi pekerjaan terhadap terminal; fg tidak membuat pekerjaan kebal terhadap penutupan terminal atau shell. Untuk sesi yang perlu disambung kembali, pertimbangkan tmux; untuk pekerjaan layanan yang harus dikelola jangka panjang, pertimbangkan pengelola layanan yang sesuai. Fg sendiri tidak menyediakan fungsi tersebut.

Perilaku fg, penentu pekerjaan, dan interaksi terminal dijelaskan pada bagian fg di SHELL BUILTIN COMMANDS serta JOB CONTROL dalam manual GNU Bash. Gunakan bantuan lokal jika shell atau versi yang digunakan berbeda.

FAQ

Apakah %1 dalam fg %1 merupakan PID?

Tidak. %1 adalah penentu pekerjaan nomor 1 dalam shell yang sedang digunakan. Jobs -l menampilkan nomor pekerjaan dan PID agar keduanya dapat dibedakan.

Mengapa prompt tidak kembali setelah fg?

Shell sedang menunggu pekerjaan latar depan selesai atau ditangguhkan. Program seperti sleep tidak menampilkan antarmuka, sedangkan editor dapat menampilkan layar interaktif. Periksa jenis pekerjaan yang dipilih sebelum memutuskan menunggu, menangguhkan, atau mengakhirinya.