Bash'te suspend komutunu kullanmanın pratik bir örneği nedir?


12

suspendBash'te yerleşik bir komuttur. Bu komutu doğal olarak ne zaman kullanırsınız ve faydalı bulursunuz?


1
Kabuk, bir alt işlemi her çatalladığında kendini askıya alır, yani adı geçen komutun harici bir program olduğu, bir fork/execsistem çağrısı gerektiren bir komut çalıştırır
the_velour_fog

1
Etkileşimli bir kabukta bu, alt işlemin uçbirimin kontrolünü ele geçirmesine izin verirken, üst kabuğun dağınık hale gelen uçbirim ile etkileşime girmesine izin vermez.
the_velour_fog

2
@velour, ancak bunun için ayrı bir komut çalıştırılması gerekmez mi?
ilkkachu

@the_velour_fog Teknik olarak, STOPbir alt işlemi çatalladığında üst kabuk askıya alınmaz ( sinyal almaz ). İkinci yorumunuzda biraz kafam karıştı.
Kusalananda

1
@Kusalananda tamam, doğru wait()bana mantıklı geliyor. Dedim ki , kabuk her çocuk sürecini çatalladığında kendini askıya alır . Hiç durma sinyali almayla ilgili hiçbir şey söylemedim, bu hiç mantıklı değil.
the_velour_fog

Yanıtlar:


14

Let Diyelim ki hem GNU eksikliği söylemek screenve tmux(ve X11, ve sanal konsolları) ama bir giriş kabuğu ve başka interaktif kabuk arasında geçiş yapmak istiyorum.

Öncelikle konsolda oturum açarsınız ve ardından oturum açma kabuğunu geçici olarak engelleyen yeni bir kabuk başlatırsınız. Giriş kabuğunun orada bir şeyler yapmasını sağlamak için yapardınız suspend. O zaman fgorada ne yaparsanız yapın devam etmek için etkileşimli kabuğu geri almak istiyorsunuz.

Aslında, iş kontrolü ile, giriş kabuğu fg %1, fg %2vb. İle geçiş yapabileceğiniz arka plan işleri olarak bir dizi etkileşimli kabuk oluşturabilir , ancak giriş kabuğuna geri dönmek suspendiçin manuel olarak istemediğiniz sürece kullanmanız gerekir kill -s STOP $$.

Ayrıca , etkileşimli bir kabuktaki istemde Ctrl+ işaretinin Zonu askıya almayacağını da unutmayın .

DÜZENLEME: Başlangıçta suspendbir komut dosyasında kullanımı hakkında uzun bir varsayımsal bölüm vardı , ancak komut iş kontrolü gerektirdiğinden ve etkileşimli olmayan kabuklar genellikle iş kontrolüne sahip olmadığından bu bölümü sildim.


İle bölüm silinmiş suspendyerine kill -s STOP $$(bu gerçekten değil artık cevap aittir, ama yine de başkalarına ilginç olabilir):

Bir komut dosyasında bir arka plan işleminiz (komut dosyası) olduğunu ve bazı aşamalardaki bu arka plan işleminin durması ve üst sürecin devam etmesini beklemesi gerektiğini varsayalım. Bu, ebeveynin dosyaları ayıklamak ve yerine taşımak için zamana veya benzeri bir şeye sahip olması için olabilir.

Alt komut dosyası askıya alınır ( kill -s STOP $$) ve üst komut dosyası, CONTdevam etmek uygun olduğunda ona bir sinyal gönderir .

Bir ana işlem ve bir alt süreç arasında bir tür senkronizasyon uygulama fırsatı verir (ana kabuk işlemi çok az olsa da, alt işlemin askıya alındığını tahmin etmek gerekir, ancak bu, çocuğa sahip olarak düzeltilebilir. yakalayın CONTve bu sinyal çok erken alınırsa askıya alınmayın).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.