Saya mengetik help suspend
dan mendapatkan penjelasan singkat ini:
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
Bagaimana saya mengerti ini adalah: Saya mengetik suspend
dan terminal membeku, bahkan strg + c tidak bisa mencairkannya. Tetapi ketika saya membuka terminal lain dan mencari PID untuk yang beku dan ketik kill -SIGCONT PID-NR
sinyal SIGCONT dikirim ke terminal beku dan mencairkannya, sehingga tidak membeku.
Tapi, apa sebenarnya tujuan menangguhkan terminal? Aplikasi mana yang khas untuk setiap hari? Apa yang ada dalam pikiran orang-orang yang membuatnya menjadi shell?
bash
signals
suspend
shell-builtin
sharkant
sumber
sumber
Jawaban:
Jika Anda memulai shell dari shell lain, Anda dapat menangguhkan yang dalam. Katakan ketika menggunakan
su
, dan ingin beralih kembali ke pengguna biasa sejenak:(Jika Anda melakukan itu, jangan lupa shell istimewa dibuka di latar belakang ...)
Demikian pula, jika Anda melarikan diri ke shell dari beberapa program lain (
!
perintah dalam mis.less
), Anda masih dapat menangguhkan shell. Tapi saya tidak akan berharap banyak program lain untuk menanganinya dengan baik ketika mereka meluncurkan subproses, yang kemudian ditangguhkan sendiri.sumber
vim
, dan melakukan:sh
untuk mendapatkan subkulit (khususnya,zsh
subkulit). Berjalansuspend
memasukkan saya ke shell asli (itu menangguhkan subkulit dan vim).zsh
tampaknya lebih pintar dari itubash
, saya mencoba melarikan diri ke keduanyaless
danvi
(Debianvim.tiny
):zsh
menghentikan aplikasi induk juga,bash
menggantung semuanya.bash
untukbash
bekerja.Itu sama dengan menekan Ctrl+Zpada perintah lain.
Ini menangguhkan shell dan memberikan kontrol kembali ke shell induk atau proses jika ada.
Contoh:
Fitur ini berasal dari csh, cangkang BSD (di mana kontrol pekerjaan berasal) di awal 80-an .
Di AT&T
ksh
, ini adalah alias bawaan untukkill -s STOP $$
( ya, tanpa tanda kutip! )Dalam kasus Anda,
bash
mungkin yang dimulai langsung oleh terminal emulator. Dan emulator terminal Anda tidak mengharapkan proses untuk ditangguhkan.Itu
bash
adalah pemimpin sesi. Jika ketua sesi ditangguhkan, jika kita melihat terminal waktu lama, pengguna tidak akan bisa melanjutkannya.bash
alamat itu dengan menolaksuspend
jika itu adalah shell login. Tetapi dalam kasus Anda, emulator terminal Anda mungkin tidak mulaibash
dalam mode masuk, sehingga perlindungan tidak ada.zsh
danmksh
tidak memiliki masalah karena mereka mengirim sinyalSIGTSTP
(yang juga dikirim Ctrl+Z) seperti csh bukannyaSIGSTOP
(dan ke grup proses pemanggil untukmksh
seperti di csh, dan ke grup proses utama shell untukzsh
, bukan$$
proses saja ).SIGTSTP
diabaikan ketika dikirim ke grup proses yatim, dan grup pemimpin memenuhi syarat. Idenya adalah bahwa SIGTSTP tidak boleh menunda sesuatu yang tidak dapat dilanjutkan oleh pengguna.Dalam
mksh
atauyash
, seseorang juga dapat menggunakansuspend
untuk menangguhkan subkulit itu sendiri:Itu tidak akan bekerja dengan
zsh
yang mengirim SIGTSTP ke grup proses utama alih-alih pemanggil. Dalam setiap shell yang memilikikill
builtin, kita selalu dapat menggunakannyakill -s TSTP 0
.sumber
command .... &
tetapi Anda lupa&
dan sekarang harap Anda dapat menambahkannya tanpa mengganggu perintah): Anda dapat:,ctrl-z
lalu ketik:bg
untuk melanjutkan tugas yang terakhir ditangguhkan di latar belakang. (ataubg %n
untuk melakukan ini dengan nomor tugasn
. Gunakanjobs
untuk mendapatkan daftar tugas yang ditangguhkan atau sedang berjalan)suspend
perintah sebenarnya .