İş kontrolü (Unix) - Job control (Unix)

Gelen Unix ve Unix benzeri işletim sistemleri , iş denetim bölgesinin kontrol belirtir işler bir yan kabuk özellikle interaktif bir "İş" bir bir kabuk gösterimi olduğu, işlem grubu . Temel iş kontrol özellikleri, iş / süreç grubundaki tüm süreçlerin askıya alınması, devam ettirilmesi veya sonlandırılmasıdır; işe sinyaller gönderilerek daha gelişmiş özellikler gerçekleştirilebilir . İş kontrolü, çoklu işlemesi nedeniyle Unix'te özellikle ilgi çekicidir ve genellikle sıralı yürütmeye ( toplu işleme ) uygulanan iş kontrolünden ayırt edilmelidir .

Genel Bakış

Bir terminal (veya terminal öykünücüsü ) aracılığıyla Unix veya Unix benzeri işletim sistemlerini kullanırken , bir kullanıcı başlangıçta yalnızca tek bir işlem çalıştırır, oturum açma kabuğu . Çoğu görev (dizin listeleme, dosyaları düzenleme, vb.), Programın terminalin kontrolünü ele almasına ve program çıktığında kontrolü kabuğa geri döndürmesine izin vererek - resmi olarak, kabuğa standart giriş ve standart çıktıya eklenerek, terminalden okuyan veya yazan ve klavyeden gönderilen sinyalleri, + düğmesine basmaktan kaynaklanan sonlandırma sinyali gibi . ControlC

Ancak bazen kullanıcı terminali başka bir amaçla kullanırken bir görevi yerine getirmek isteyebilir. Çalışmakta olan ancak terminalden girdi almayan bir görevin "arka planda" çalıştığı söylenirken, terminalden giriş alan tek görev "ön plandadır". İş kontrolü, kullanıcının arka planda süreçleri başlatmasına, halihazırda çalışan süreçleri arka plana göndermesine, arka plan süreçlerini ön plana getirmesine ve süreçleri askıya almasına ya da sonlandırmasına olanak tanıyarak bunu mümkün kılmak için geliştirilmiş bir kolaylıktır .

Bir kavramı, tek bir kabuk komutunun (kabuk) konseptini, komutun gerektirdiği olası birçok işlemin (işletim sistemi) konseptiyle eşleştirir. Çok süreçli görevler, süreçler ek çocuk süreçler oluşturabileceği ve tek bir kabuk komutu birden fazla iletişim sürecinden oluşan bir ardışık düzen içerebileceği için ortaya çıkar . Örneğin, "başlık" metnini içeren satırları seçmek, bunları alfabetik olarak sıralamak ve sonucu bir çağrı cihazında görüntülemek için bir komut .

grep title somefile.txt | sort | less

Bu, en az üç işlem yaratır: biri grep için , biri sıralama için ve biri daha az için . İş kontrolü, kabuğun bu ilgili süreçleri tek bir varlık olarak kontrol etmesine izin verir ve bir kullanıcı uygun tuş kombinasyonunu (genellikle Control + Z ) verdiğinde, tüm süreç grubu askıya alınır.

İşler, işletim sistemi tarafından tek bir işlem grubu olarak yönetilir ve iş, kabuğun böyle bir grubun dahili temsilidir. Bu, POSIX'te şu şekilde tanımlanır :

Hepsi aynı süreç grubunda bulunan, bir kabuk iş hattını ve ondan türeyen süreçleri içeren bir dizi süreç.

Bir işe, kabuk yerleşikleri tarafından işe atıfta bulunmak için kullanılan , iş kontrol iş kimliği veya basitçe iş kimliği adı verilen bir tutamaç ile başvurulabilir . İş kimlikleri karakterle başlar ; tanımlar iş n iken gerektiğini tespit ettiği geçerli iş. Diğer iş kimlikleri POSIX tarafından belirlenir . Gayri resmi kullanımda bu numaraya "iş numarası" veya "iş kimliği" olarak atıfta bulunulabilir ve Bash belgeleri, iş türü olarak (% -önekli) iş kimliğine atıfta bulunur.%%n%%

İş kontrolü ve iş kimlikleri tipik olarak yalnızca süreç gruplarına atıfta bulunmayı basitleştirdikleri etkileşimli kullanımda kullanılır; komut dosyası oluşturmada bunun yerine PGID'ler kullanılır, çünkü bunlar daha kesin ve sağlamdır ve aslında iş kontrolü, bash komut dosyalarında varsayılan olarak devre dışı bırakılır.

Tarih

İş kontrolü ilk olarak Jim Kulp tarafından C kabuğunda , ardından Avusturya'daki IIASA'da 4.1 BSD çekirdeğinin özelliklerinden yararlanılarak uygulandı . KornShell Bell Laboratuarlarında geliştirilen, bunu benimsemiş ve daha sonra bir SVR4 sürümü dahil oldu Bourne kabuğu , ve en modern Unix kabukları bulunmaktadır.

Komutlar

POSIX standardı, askıya alınmış işleri arka planda ve ön planda devam ettirmek için sırasıyla bg ve fg olmak üzere iki komut belirtir . Bunlar, Korn kabuk işi kontrol komutlarından sonra modellenmiştir.

Uygulama

Tipik olarak, kabuk bir iş tablosundaki işlerin bir listesini tutar . Bir işin, bir boru hattının tüm üyelerinden ve onların soyundan gelenlerden oluşan bir süreç grubuna karşılık geldiğini hatırlayın . jobs Komut onların işi numarası ve iş durumuna (durdurulmuş veya çalışan) ile birlikte iş tablosunda mevcut arka plan işler listelenir. Kullanıcı oturumu kapattığında ( oturum lideri sürecini sonlandıran kabuktan çıkar) bir oturum sona erdiğinde , kabuk işlemi tüm işlere SIGHUP gönderir ve kendini sonlandırmadan önce işlem gruplarının bitmesini bekler.

disown Komut oturumu çocuk süreç grupları SIGHUP gönderilmez biter, ne kabuk beklemek yaptığında bu yüzden onları sonlandırmak için bu iş tablodan işlerini kaldırmak için kullanılabilir. Böylece öksüz süreçler haline gelirler ve işletim sistemi tarafından sonlandırılabilirler, ancak bu daha sık kullanılır, böylece süreçler init tarafından benimsenir (çekirdek, ana süreçlerini init olarak ayarlar) ve arka plan programı olarak çalışmaya devam eder . İşlerin sonlandırılmasını önlemeye yönelik alternatifler arasında nohup ve bir terminal çoklayıcı kullanılması yer alır .

Ön planda çalışan bir iş, askıya alma karakteri ( Ctrl-Z ) yazılarak durdurulabilir . Bu işlem grubuna "terminal durdurma" sinyalini ( SIGTSTP ) gönderir . Varsayılan olarak, SIGTSTP onu alan işlemlerin durmasına neden olur ve kontrol kabuğa döndürülür. Bununla birlikte, bir işlem SIGTSTP için bir sinyal işleyiciyi kaydedebilir veya yok sayabilir. Bir işlem, yakalanamayan veya göz ardı edilemeyen "durdur" sinyali ( SIGSTOP ) ile de duraklatılabilir .

Ön planda çalışan bir iş, kesme karakteri ( Ctrl-C ) yazılarak kesilebilir . Bu , geçersiz kılınabilirse de, varsayılan olarak işlemi sonlandıran "kesme" sinyalini ( SIGINT ) gönderir .

Durdurulmuş bir iş, bg yerleşik ile bir arka plan işi olarak veya ile ön plan işi olarak devam ettirilebilir fg . Her iki durumda da, kabuk G / Ç'yi uygun şekilde yeniden yönlendirir ve işleme SIGCONT sinyalini gönderir , bu da işletim sisteminin yürütmeye devam etmesine neden olur. In Bash , bir program, bir ve işareti (iliştirerek bir arka plan işi olarak başlatılabilir & komut satırına); çıkışı terminale yönlendirilir (potansiyel olarak diğer programların çıktısıyla birlikte), ancak terminal girişinden okuyamaz.

Kontrol terminalinden okumaya veya yazmaya çalışan bir arka plan işlemi, bir SIGTTIN (giriş için) veya SIGTTOU (çıkış için) sinyali gönderir. Bu sinyaller işlemi varsayılan olarak durdurur ancak başka şekillerde de ele alınabilir. Kabuklar genellikle SIGTTOU'nun varsayılan durdurma eylemini geçersiz kılar, böylece arka plan işlemleri çıktılarını varsayılan olarak kontrol terminaline gönderir.

Bash uyumlu kabuklarda kill yerleşik (değil /bin/kill ), işleri iş kimliğine ve işlem grubu kimliğine göre işaret edebilir - bir işe bir sinyal göndermek, işi tüm süreç grubuna gönderir ve bir iş kimliği ile belirtilen işler tarafından öldürülmelidir. önek % . kill bir işe herhangi bir sinyal gönderebilir; ancak, amaç sistemi süreçlerden kurtarmaksa, SIGKILL ve SIGTERM (varsayılan) sinyalleri muhtemelen en uygulanabilir olanlardır.

Ayrıca bakınız

Notlar

Referanslar

daha fazla okuma

Dış bağlantılar