Bash Komut Dosyalarını Kullanarak Alt Kabukların Nasıl Çalıştırılacağını Öğrenin

Arka planda Paralel Çalıştırmak için Alt Kabuklar Nasıl Yönetilir

Bir kabuk Linux sisteminde komutları girmek için temel bir arabirimdir. Bununla birlikte, doğrudan bir komut girebilir veya yürütülecek komut dizisini içeren bir dosya (komut dosyası) belirtebilirsiniz. Kabuklar bir hiyerarşide düzenlenir ve herhangi bir kabuk yeni bir kabuk oluşturabilir. Yeni kabuk, onu oluşturan ana kabuğun alt öğesi olan alt süreç olarak kabul edilir.

Varsayılan olarak, bir alt kabuk, üst işlem sonlanırsa alt kabuk da sonlanırsa, üst öğeye bağımlıdır. Herhangi bir çıktı alt kabuktan ana kabuktan geçirilir.

Subshell Nasıl Oluşturulur

Bir Bash kabuk betiğinde, parantez işaretini kullanarak bir alt kabuk oluşturursunuz:

#! / bin / bash echo "Subshell'i başlatmadan önce" (sayma = 1 iken [$ count-99]] echo "$ sayımı" uyku 1 ((sayma ++)) tamamlandı) echo "Bitmiş"

Örnekte while döngüsü , parantez içine alınır; bu, komut dosyasının yürütüldüğü kabuğun bir alt kabuğunda yürütülmesine neden olur.

Arka planda Subshell Çalıştırma

Alt kabuğun arka planda çalıştırılacağını belirtmediğiniz sürece, ana kabuk altyazının komut dosyasının geri kalanıyla devam etmeden önce bitmesini bekler. Ancak, alt kümeleri paralel olarak çalıştırmak istiyorsanız, bunları, aşağıda gösterildiği gibi, alt kabuk ifadesini izleyen ve işareti karakteri ile gerçekleştirilmiş arka planda çalıştırırsınız:

#! / bin / bash echo "Subshell'i başlatmadan önce" (sayım = 1 iken [$ count-99]] echo "$ sayımı" uyku 1 ((++ sayımı) yapılır)) & echo "Bitir"

Paralelde Çoklu Subshells Çalıştırma

Arka plan işlemleri olarak birden fazla alt kabuk oluşturursanız, görevleri paralel olarak çalıştırabilirsiniz. Tipik olarak, işletim sistemi, süreçler kadar en az sayıda işlemci veya çekirdek olduğu varsayılarak, her işlem ve alt işlem için farklı işlemciler veya çekirdekler kullanır. Aksi takdirde, görevler aynı işlemcilere veya çekirdeklere atanır. Bu durumda, işlemci veya çekirdek görevler tamamlanana kadar atanan görevler arasında sürekli olarak geçiş yapar. Bir sonraki örnekte iki alt işlem vardır. İlki 1'den 99'a, ikincisi 1000'den 1099'a kadar sayar.

#! / bin / bash echo "Subshell'i başlatmadan önce" (sayma = 1 iken [$ count -le 99] echo "$ sayımı" uyku 1 ((++ sayımı)) yapılır) & (count = 1000 iken [$ count -le] 1099] echo "$ sayım" uyduruyor 1 ((sayım ++)) bitmiş "& bitmiş"

Komut dosyasının geri kalanıyla devam etmeden önce alt işlemlerin bitmesini beklemek için üst işlemin anlatılması için bekleme deyimini kullanın:

#! / bin / bash echo "Subshell'i başlatmadan önce" (sayma = 1 iken [$ count -le 99] echo "$ sayımı" uyku 1 ((++ sayımı)) yapılır) & (count = 1000 iken [$ count -le] 1099] echo "$ sayım" uyu 1 ((sayın ++)))) & wait echo "Bitmiş"

Subshells için kullanır

Alt kabuklar, komutların belirli bir ortamda veya dizinde yürütülmesi gerektiğinde yararlıdır. Her komut farklı bir alt kabukta yürütülürse, değişken ayarların karıştırılması riski yoktur. Tamamlandığında, ana işlem ortamının alt işlemlerinden hiçbiri etkilenmediğinden ayarlar ve geçerli dizinin geri yüklenmesi gerekmez.

Subshells, işlev tanımlarında kullanılabilir ve böylece farklı parametrelerle birden çok kez çalıştırılabilirler.