Ini harus berlaku untuk semua shell dengan kontrol pekerjaan, yang (sebagian besar) dapat Anda terima begitu saja kecuali berurusan dengan shell yang benar-benar kuno. Ada dalam standar POSIX , jadi bahkan dashmendukung kontrol pekerjaan (saat dijalankan secara interaktif atau dengan -m).
Interaktif
- Ctrl+ zakan menangguhkan program yang saat ini foregrounded
bgakan latar belakang program yang terakhir ditangguhkan
(digunakan bg %2dengan nomor pekerjaan, yang dapat Anda periksa jobs)
fg akan memagari program yang terakhir ditangguhkan
Di zsh, Anda bisa menulis kunci yang mengikat untuk dijalankan secara implisit fgdari prompt melalui Ctrl+ lainnya z:
_zsh_cli_fg() { fg; }
zle -N _zsh_cli_fg
bindkey '^Z' _zsh_cli_fg
Mungkin juga ada cara cerdas untuk secara implisit dijalankan bgpada penangguhan, tetapi tampaknya tidak bijaksana; setidaknya bagi saya, sebagian besar penggunaan Ctrl+ saya zadalah karena Ctrl+ cgagal keluar; Saya ingin mengikutinya dengan misalnya kill %1daripada bg, dan saya tentu saja tidak ingin default untuk membunuh! (Logika ini juga meluas ke mengapa saya tidak lagi menggunakan pengikatan kunci ini: Jika saya memalu Ctrl+ zuntuk menghentikan proses, hal terakhir yang saya inginkan adalah melanjutkan!)
Non-interaktif
Jika Anda menggunakan instance shell yang berbeda (atau pengguna yang berbeda, terkadang termasuk sudoperintah), Anda kemungkinan tidak akan dapat menggunakan nomor pekerjaan.
Anda masih dapat bertindak pada proses lain setelah Anda mengetahui ID prosesnya (PID). Anda bisa mendapatkan PID dengan pgrep …, atau ps aux |grep …(atau dari shell yang sama jobs -l,, atau $!) dan kemudian Anda dapat menjalankan:
kill -STOP $PID # suspend
kill -CONT $PID # continue (resume)
Jika Anda tidak tahu ID proses dan tidak khawatir tentang menangguhkan instance proses lainnya dengan nama, Anda dapat mengirimkan sinyal ke salah satu dari ini:
killall -STOP program_name
pkill -STOP program_name
pkill -f -STOP program_name_or_args
Sebuah CONTsinyal untuk program berhenti dengan Ctrl+ z(dan tidak bg'd) akan melanjutkan kemajuannya (di latar depan), sama seperti jika Anda adalah untuk fgitu.
Re: Standard Error
Hasil edit untuk pertanyaan ini menanyakan tentang kesalahan standar:
Proses menghasilkan ke stderr, jadi bagaimana saya akan mengeluarkan perintah fg <jobid>saat proses menghasilkan ke terminal?
Kecuali jika pekerjaan tersebut memiliki komponen yang berlatar belakang (atau seluruh pekerjaan dilatar belakangi, mungkin melalui kill -CONT), Anda seharusnya tidak benar-benar melihat output saat ditangguhkan.
Jika masih mengeluarkan data (baik itu ke keluaran standar atau kesalahan standar), tentu saja akan membuat terminal Anda berantakan secara visual, tetapi semua output itu akan diabaikan karena itu bukan bagian dari input Anda. Ini mungkin membuatnya lebih sulit untuk mengetahui Anda belum memasukkan salah ketik apa pun, tetapi pengetikan (secara membabi buta) fgEntersudah mencukupi (kecuali Anda memiliki banyak pekerjaan dan pekerjaan yang dimaksud bukan yang paling baru, dalam hal ini Anda memang membutuhkan deskriptor pekerjaan) ).
Jika Anda perlu menemukan deskriptor pekerjaan, gunakan terminal lain untuk mengirimkan STOPsinyal melalui metode non-interaktif di atas. Ini akan membebaskan layar Anda (mungkin menekan Enterbeberapa kali atau menjalankan clearatau Ctrl+ L) sehingga Anda kemudian dapat menjalankan jobsuntuk menemukan deskriptor pekerjaan dan kemudian jalankan di fg %Nmana Nnomor itu.