İş denetimi, bir sürecin çalışmasını seçerek durdurma (bekletme) ve daha sonra çalışmasını sürdürme (yeniden başlatma) yeteneği demektir. Bir kullanıcı bu araçla genellikle Bash ve sistemin uçbirim sürücüsü tarafından ortak olarak sağlanan bir etkileşimli arayüz üzerinden çalışır.
Kabuk bir iş ile her boruhattını ilişkilendirir. Halen çalışmakta olan ve jobs komutu ile listelenebilen işlerin listesini bir tabloda saklar. Bash bir işi eşzamansız olarak başlattığında şöyle bir ileti gösterir:
Bu ileti, işin iş numarasının 1 ve bu işle ilişkilendirilen boruhattındaki son sürecin süreç kimliğinin (PID) 25647 olduğunu ifade eder. Bir tek boruhattındaki süreçlerin tümü aynı işin üyeleridir. Bash iş denetimi için esas olarak iş soyutlaması kullanır.
İş denetiminin kullanıcı arayüzünün gerçeklenmesini kolaylaştırmada,
işletim sistemi, kullanılan uçbirim sürecinin grup kimliği diye bir
kavram sağlar. Bu süreç grubunun üyeleri (süreçlerin süreç grubu kimliği,
kullanılan uçbirimin süreç grubu kimliğine eşittir) klavyeden üretilen
SIGINT gibi sinyalleri alır. Bu süreçler önalanda
olduklarını söylerler. Artalan süreçleri, süreç grubu kimliği uçbiriminkinden
farklı olan süreçlerdir. Bu süreçler klavyeden üretilen sinyallerden
bağışıktır. Sadece önalan süreçleri uçbirime yazar ve uçbirimi
okuyabilir. Uçbirimi okumaya (ya da yazmaya) çalışan artalan süreçleri
bir SIGTTIN (SIGTTOU) sinyali
yakalanmadıkça, süreci bekleten uçbirim sürücüsü üzerinden gönderir.
Bash'in çalıştığı işletim sistemi üzerinde iş denetimi destekleniyorsa,
Bash onu kullanacak araçları içerir. Bir süreç çalışırken
bekletme karakteri nin tuşlanması (genelde
^Z, Control-Z'dir) sürecin durdurulmasına ve denetimin
Bash'e geçmesine sebep olur. Gecikmeli bekletme karakterinin (genelde
^Y, Control-Y'dir) tuşlanması, uçbirimden girdi
okumaya çalıştığı zaman sürecin durdurulmasına sebep olur ve denetim Bash'e
döndürülür. Bundan sonra kullanıcı bu işin durumunu değiştirebilir:
bg komutunu kullanarak artalanda,
fg komutunu kullanark önalanda işi devam
ettirebilir ya da kill komutu ile süreci
öldürebilir. Bir ^Z hemen etkisini gösterir ve
çıktının askıda kalmasına ve baştanyazmanın iptal edilmesine
sebep olan bir yan etkisi vardır.
Kabuktaki bir işi ifade etmede kullanılan bir kaç yol vardır.
% karakteri bir işin ismini ifade eder.
İş numarası n'e, %n olarak
başvurulabilir. %+ ve %%
sembolleri, artalanda başlatılan ya da önalanda olan durmuş son işin
yani o anki iş kavramının kabuktaki karşılığıdır. Tek bir % (iş belirtimine eşlik etmeksizin) ayrıca o anki işi belirtmek için kullanılabilir. Önceki iş ise
%- sembolü ile ifade edilir. İşlerle ilgili çıktılarda ise (örn. jobs komutunun çıktısı), o anki iş daima bir + ile önceki iş ise - ile imlenir.
Bir işe onu başlatan ismi bir önek olarak kullanarak ya da komut satırının
içinde geçen bir dizge kullanılarak erişilebilir. Örneğin,
%ce durmuş olan ce işini
ifade eder. %?ce şeklinde bir kullanımda ise
komut satırında ce dizgesi geçen bir iş ifade
edilebilir. Eğer önek ve dizge birden fazla işle eşleşirse, Bash bir
hata uyarısı verir.
Bir işin isimlendirilmesi onu önalana almak için kullanılabilir:
%1, fg %1
komutuna eşdeğerdir ve 1 numaralı işi artalandan önalana almak içindir.
Benzer olarak, %1 &,
bg %1 komutuna eşdeğerdir ve
1 numaralı işin artalanda sürdürülmesini sağlar.
Kabuk herhangi bir yerde bir iş durumunu değiştirdiğinde anında öğrenir.
Normalde Bash bir işi, durumundaki değişiklikleri raporlamadan önce
bir komut istemi basmaya hazır hale gelene kadar herhangi bir çıktısına
kesme uygulamadan bekler. set yerleşiği
-b seçeneği ile çalıştırılmışsa, Bash bu değişiklikleri
anında raporlar. Her çocuk sürecin çıkışında varsa SIGCHLD
sinyal kapanı çalıştırılır.
Durmuş işler varken Bash çıkmaya çalışırsa, kabuk durmuş işlerin varlığını
belirten bir uyarı iletisi basar. Bundan sonra onların durumunu öğrenmek
için jobs komutu kullanılabilir. Bir ara komut
olmaksızın çıkmak için ikinci bir istek daha gelirse, kabuk bir ileti
daha göstermez ve durmuş işler sonlandırılır.