Ctrl+ZDiğer komutlarda basmanın karşılığı budur .
Kabuğu askıya alır ve varsa ana kabuğu veya işlemi kontrol eder.
Örnek:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
Bu özellik 80'lerin başlarında BSD'nin kabuğu (iş kontrolünün geldiği yer) olan csh'den geliyor .
AT & T'de ksh, bu yerleşik bir takma addır kill -s STOP $$( evet, tırnak işaretleri olmadan! )
Sizin durumunuzda, bashmuhtemelen doğrudan terminal emülatörü tarafından başlatılan kişiydi. Ve terminal emülatörünüz sürecin askıya alınmasını beklemiyordu.
Bu bashbir oturum lideriydi. Oturum lideri askıya alınırsa, eski zaman terminallerinin görüntüsünü alırsak, kullanıcının buna devam etmesi mümkün olmayacaktır.
bashsuspendbir giriş kabuğu olup olmadığını reddederek bu adresleri . Ancak, sizin durumunuzda, terminal emülatörünüz muhtemelen bashoturum açma modunda başlamıyor , bu nedenle koruma sağlanmadı.
zshve mkshproblemi yoktur, çünkü csh gibi (ve SIGTSTPayrıca gönderilen bir Ctrl+Z) sinyalini csh yerine SIGSTOP(ve csh'deki gibi arayanlar için mkshişlem grubuna ve kabuğun ana işlem grubuna zsh, sadece $$işlem için göndermezler) ). SIGTSTPyetim bir süreç grubuna teslim edildiğinde göz ardı edilir ve lider grubu nitelendirilir. Buradaki fikir, SIGTSTP'nin bir kullanıcı tarafından sürdürülemeyen bir şeyi askıya almaması gerektiğidir.
İçinde mkshveya yashbiri, suspendbir alt kabuğun kendisini askıya alması için de kullanılabilir :
$ (set -x; sleep 1; suspend; sleep 2)
+ sleep 1
+ suspend
[1] + Stopped(SIGSTOP) (set -x; sleep 1; suspend; sleep 2)
$ fg
[1] (set -x; sleep 1; suspend; sleep 2)
+ sleep 2
Bu işe yaramazsa zsh, SIGTSTP'yi arayan yerine ana süreç grubuna gönderir. killYerleşik olan herhangi bir kabukta, kill -s TSTP 0bunun yerine her zaman kullanabilirsiniz .