top of page

Kabuğun Çalışma Prensipleri ve Komutlar-2

  • Yazarın fotoğrafı: Huseyin Şahan
    Huseyin Şahan
  • 14 Mar
  • 4 dakikada okunur

Bu blog yazımızda kabukta komutları nasıl arka planda çalıştıracağınızı ve arka plan işlemlerini nasıl görebileceğinizi göstereceğiz.Bazen bazı işlemler uzun sürebilir ve terminalimizi meşgul etmek istemeyebiliriz.Arka plan işlemleri tam bu noktada aslında bize yardımcı oluyor.


İşlem Listeleri Oluşturma

Çalıştığınız kabukta aşağıdaki gibi bir sıralı işlem yürütebilirsiniz.Bu aslında bir işlem listesi değil sıralı bir komut yürütme biçimidir.

darkside@debian:~$ pwd;ls;who;which

Komutun çıktısı aşağıdaki gibi olacaktır.


ree

Burada işlemlerin sıralı olarak işlendiğini görebilirsiniz.Ancak bu bir işlem listesi ifade etmez.Bu şekilde belirtilen işlemler ana kabuk üzerinde yani bulunduğunuz kabuk üzerinde çalışır.Örneğin bir değişken oluşturusanız veya silerseniz bu bulunduğunuz ana kabukta etki yaratacaktır.Bunu çoğu zaman istemeyebilir ve komutlarımızı alt kabuklarda çalıştırmak isteyebiliriz.Bu şekilde oluşturacağınız veya değiştirdiğiniz değerler yalnızca alt kabuk için geçerli olur ve üst kabuğa etki etmez.Bunun için harika bir örnek verelim.Bir x değişkeni oluşturalım başlangıç için parantez kullanalım ve ana kabukta değerin yazdırılmadığını görelim.Alt kabuğa değişkeni gönderin ve yazdırın.

darkside@debian:~$ (x=10;echo $x)
ree

Burada x değerimiz alt kabukta yazdırılacak ve 10 değerini göreceksiniz. Tamam şimdi ise x değişkeni ana kabuğumuzda var mı diye bakalım ve echo komutu ile x değerini yazdırmaya çalışalım.

darkside@debian:~$ echo $x

İşte göründüğü gibi x değeri ana kabukta bulunamaz.Burada parantez işlevi ile değeri alt kabuk yani çocuk kabuk oluşturarak burada oluşturup yazdırmamızdan kaynaklıdır.İşte ekran çıktısı.

ree

Unutmayın alt kabukta oluşturduğunuz değerler üst kabukta hiçbir anlam ifade etmez.İşlem tamamlanınca yani parantez işlemi içinde verilen komutlar tamamlanıncaya kadar alt kabuk devam eder.Parantez işlemi sona erince kabuk yok edilir.


Anlatılanlar size anlamsız geliyor olabilir.Bu sorunu çözmek ve parantez kullanıldığında ve kullanılmadığındaki farkları anlatmak için linux sistemindeki global bir değişkeni kullancağız.Bu işlemimizin çalıştığı derinliği gösterecektir.= değerinde alt kabukta çalışmaz eğer 1 ise derinlik 1 yani alt kabukta çalışıyor veya 1 değerinden büyükse alt kabuğun alt kabuğunda çalışmış oluyor.Aşağıdaki komutu inceleyin.

darkside@debian:~$ pwd;ls;who;which; echo $BASH_SUBSHELL

Burada $BASH_SUBSHELL global değeri bize bunu söyleyecektir.Değer 0 ise ana kabukta 1 ise çocuk kabuk oluşturuluyor ve orada çalışıyor demektir.Çıktıya bakın parantez kullanmadık ve sonuç:


ree

En alltaki değeri okuyun.Komutlarımızın hepsi ana kabukta çalışmış ve değer 0. Tamam şimdi parantez yardımı ile komutlarımız çocuk kabukta çalıştıralım.

darkside@debian:~$ (pwd;ls;who;which; echo $BASH_SUBSHELL)

İşte işlemin çıktısını okuyun değer burada 1 olarak geldi.Bu çocuk kabuk oluşturulduğunu yani ana kabuktan bağımsız bir kabukta çalıştığımızı gösterir.


ree

İşte iç içe alt kabukta çalışan bir işlem bu sefer 2 değerini göreceksiniz.İlk kez alt kabuk oluştu değer 1 olacak ve echo komutunun çalıştığı 2. kabuk oluşacaktır.Yani iç içe kabuk oluşacak.

darkside@debian:~$ (pwd;ls;who;which; (echo $BASH_SUBSHELL))
ree

Burada ilk dıştaki parantez ile bir alt kabuk oluşmuş ve echo komutunun çalıştığı kısım için ikinci parantez bir alt kabuk daha oluşturmuş.Bu BASH_SUBSHELL değişkeni ise bize çalışılan kabuk derinliğini verecektir.


Uyku ve Arka plan işlemleri

Tamam şimdi işlem listelerinin ne anlama geldiğini öğrendiğimize ve alt kabukta nasıl işlemler oluşturacağımız bildiğimize göre artık bu işlemleri nasıl bekletirsiniz veya nasıl arka planda çalışmasını sağlarsınız bunu tartışalım.


Bazen işlemleri biraz bekletmek istersiniz.Bunun birçok nedeni olabilir.Örneğin bir ağ paketini bekliyorsunuz ve ardından bir komut çalıştırmanız gerekli olabilir.İşte bir işlemi nasıl bekletebileceğiniz ile alakalı bir örnek.Bunun için sleep komutunu kullanacağız.İlk olarak kabuk girişini 10 saniye bekletelim.Yani kabuğa 10 saniye boyunca komut giremeyeceğiz.Bu ana kabuğu 10 saniye bekletecektir.

darkside@debian:~$ sleep 10

İşte işlemin beklemesini 10 saniye bekledik.


ree

Görüldüğü gibi 10 saniye boyunca kabukla etkileşime geçemedik.


Ancak her zaman kabuğu bu şekilde kullanılamaz hale getirmenize gerek yok.Burada & işaretini kullanarak işlemimizi arka plana alacağız.bu sayede kabuğumuzu daha rahat kullanabiliriz.İşte örnek bir komut.Bu komuttan sonra işlemleri görmek için ps komutunu çalıştıracağız.

darkside@debian:~$ sleep 100&

Burada işlemi 100 saniye boyunca bir uyku işlemi oluşturduk.Ancak bu arka planda oluşacak ve sizin komut girmenizi engellemeyecektir.İşte hemen ardından ps komutu ile geçerli işlemi görebiliriz.sleep işlemi hala devam ediyor.


ree

Tabii ki burada sadece ps komutu değil aynı zamanda tüm arka planda çalışan işlemleri görebilmek için job komutunu kullanabiliriz.

darkside@debian:~$ jobs
ree

Burada 1 tane sleep işleminin devam ettiğini görebilirsiniz.Eğer işlem bittiyse ve bu komutu çalıştırırsanız "bitti " gibi bir ifade verecektir.


Aslında bu mantıkla bir işlem listesi oluşturabilir ve bunu arka planda çalıştırabilirsiniz.Örnek olarak verdiğimiz komutu deneyin.

darkside@debian:~$ (sleep 20; echo $BASH_SUBSHELL; sleep 10)&

burada önce 20 saniye bekleyecek daha sonra terminale 1 yazacak ve 10 saniye sonra işlem sonlanacak.Bu işlemler arka planda gerçekleşecek ve bu arka plan işlemini jobs ile görebiliriz.İşte tam ekran çıktısı:

ree

1 ifadesi komutu çalıştırdıktan 20 saniye sonra basılacaktır.Bu işlemler devam ederken termianlinize komut girişine devam edebilirsiniz.


& işareti yerine başka bir komut ile de arka planda işlemleribizi çalıştırabilirsiniz.Bu komut coproc komutu olacaktır.

darkside@debian:~$ coproc sleep 10

İstersek bu işlemi adlandırabiliriz.Bu sayede hangi işlemin çalıştığını daha rahat görebilmiş oluruz.İşlemlerinizi isimlendirmek için:

darkside@debian:~$ coproc job1 { sleep 10; }

Burada işleme job1 ismi verilmiştir.Burada süslü parantez içinde boşluk olmalıdır.Komut sonunda noktalı virgül olacak ve komut bitiminde bir boşluk daha olacaktır.Bu simi jobs komutunun çıktısında göreblirsiniz.


ree

Burada job1 adında oluşturduğumuz ve çalışmaya devam eden işlemi görebilirsiniz.


Burada istersek bir işlem listesi bile verebiliriz.İşte örnek bir komut:

darkside@debian:~$ coproc (pwd;ls;who;which;echo $BASH_SUBSHELL)

Ancak burada herhangi bir değer yazdırmayacaktır.coproc komutu terminale bir çıktı basmaz.Eğer bir çıktı elde etmek istiyorsanız & işareti ile arka plan işlemlerini başlatın.Eğer çıktıya ihtiyacınız yoksa coproc komutu işinizi görecektir.


Bu blog yazımızda komutları veya komut listelerini nasıl arka planda çalıştıracağımızı ve arka plan işlemlerini nasıl öğreneceğimizi gördük.Bir sonraki blog yazılarımızda görüşmek üzere...

Comments


bottom of page