Merhaba arkadaşlar, bugün sizlere Linux terminalinde çalışırken hayat kurtaran, özellikle uzun süren işlemlerde pencereler arası geçiş yapmamızı sağlayan "Job Control" yani iş izleme konusunu anlatacağım. Örneğin bir derleme işlemi (make) başlattınız ve terminaliniz kilitlendi, ya da bir dosya transferi yaparken başka bir komut çalıştırmak istiyorsunuz. İşte tam burada fg, bg ve jobs komutları devreye giriyor. Benim sunucularda genelde kullandığım bu yöntem, bir terminal oturumundan maksimum verimi almamı sağlıyor.
Bu rehberde, bir işlemi nasıl duraklatıp arka plana atacağınızı, arka plandaki işi nasıl ön plana getireceğinizi ve tüm işleri nasıl listeleyeceğinizi adım adım göstereceğim. Özellikle SSH ile bağlıyken ve tek bir oturumunuz varken bu komutlar çok değerli oluyor.
Temel Kavram: Ön Plan (Foreground) ve Arka Plan (Background)
Linux'ta bir terminalde çalıştırdığınız her komut varsayılan olarak "ön planda" çalışır. Yani komut bitene veya siz durdurana kadar o terminal size yanıt vermez. "Arka plan" ise, komutu başlattıktan sonra terminalin kontrolünü size geri veren, komutun sessizce çalışmaya devam ettiği moddur. Job Control, bu iki durum arasında geçiş yapmanızı sağlar.
Adım 1: İşleri Listelemek - jobs Komutu
Her şey jobs komutu ile başlar. Bu komut, mevcut oturumunuzda (shell session) başlattığınız ve kontrol edebileceğiniz tüm işleri listeler.
Terminalinize şu komutu yazın:
Eğer henüz bir iş başlatmadıysanız boş bir çıktı alırsınız. Bir iş başlattıktan sonra çalıştırırsanız, şuna benzer bir çıktı görürsünüz:
Burada köşeli parantez içindeki sayılar iş numaralarıdır (job ID). Artı (+) işareti, en son arka plana atılan veya üzerinde işlem yapılan "mevcut işi" gösterir. Eksi (-) işareti ise bir önceki işi gösterir. "Running" çalışıyor, "Stopped" ise duraklatılmış demektir.
Adım 2: Bir İşi Duraklatmak ve Arka Plan Süreci Başlatmak
Diyelim ki ön planda çalışan bir komutunuz var (örneğin, bir metin editörü veya uzun süren bir işlem). Bu işlemi duraklatmak için klavyenizdeki Ctrl + Z tuş kombinasyonunu kullanırsınız.
Bu işlem, komutu durdurur (SIGTSTP sinyali gönderir) ve size terminal kontrolünü geri verir. İş artık "Stopped" durumundadır. Şimdi bu duraklatılmış işi arka planda çalıştırmak için bg komutunu kullanacağız.
Duraklatılmış işi arka plana almak için:
Burada %1, jobs listesinde gördüğünüz iş numarasıdır. Eğer sadece bg yazarsanız, son duraklatılan işi (artı [+] işaretli olanı) arka plana alır.
Bir komutu doğrudan arka planda başlatmak isterseniz, komutun sonuna & (ampersand) işareti ekleyebilirsiniz. Bu, işlemi hiç ön planda çalıştırmadan doğrudan arka plana atar.
Dikkat Edilmesi Gerekenler
Arka plana attığınız bir iş, eğer terminalden girdi bekliyorsa (stdin) sorun yaşayabilir. Örneğin, sudo şifresi soran veya onay bekleyen bir komutu arka plana atarsanız, işlem askıda kalacaktır. Bu tür etkileşimli komutlarda dikkatli olun.
Ayrıca, SSH oturumunuzu kapattığınızda, arka planda çalışan işlerin çoğu sonlanır (SIGHUP sinyali alır). Bunu önlemek için nohup komutunu veya screen/tmux gibi araçları kullanmanız gerekir. Bu konuya başka bir rehberde değineceğim.
Adım 3: Arka Plan İşini Ön Plana Getirmek - fg Komutu
Arka planda çalışan veya duraklatılmış bir işi tekrar ön plana getirmek ve kontrol etmek için fg komutunu kullanırız.
Örneğin, iş numarası 2 olan bir işi ön plana alalım:
Sadece fg yazmak, en son arka plana atılan işi (artı [+] işaretli olanı) ön plana getirir. İş ön plana geldiğinde, eğer duraklatılmışsa (Stopped) çalışmaya devam etmez, sizin onu devam ettirmenizi bekler. Devam ettirmek için komut satırında Enter tuşuna basmanız yeterli olabilir veya işleme bağlı olarak bir tuşa basmanız gerekebilir.
Pratik Örnek ve İpuçları
Hadi tipik bir senaryoyu birlikte yapalım:
1. Uzun süren bir komut başlatalım:
2. Komut çıktı vermeden önce Ctrl+Z'ye basıp duraklatalım.
3. jobs yazıp iş numarasını görelim (muhtemelen [1]).
4. bg %1 yazarak bu arama işlemini arka plana alalım.
5. Terminal bize geri döndü, başka işler yapabiliriz.
6. Arka plandaki işin durumunu kontrol etmek için tekrar jobs yazabiliriz.
7. İşlem bittiğinde veya çıktısını görmek istediğimizde fg %1 diyerek ön plana alırız.
Bonus ipucu: Bir işi tamamen sonlandırmak için ön plana aldıktan sonra Ctrl+C yapabilirsiniz. Ya da doğrudan iş numarası ile kill komutunu kullanabilirsiniz:
Umarım bu rehber, terminaldeki verimliliğinizi artırmanıza yardımcı olur. Ben uzun komut satırı işlemlerinde, özellikle sunucu bakım betiklerini çalıştırırken sürekli bu komutları kullanıyorum. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? screen veya tmux mu tercih ediyorsunuz yoksa temel job control yetiyor mu? Deneyimlerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin. Herkese sorunsuz çalışmalar!
Bu rehberde, bir işlemi nasıl duraklatıp arka plana atacağınızı, arka plandaki işi nasıl ön plana getireceğinizi ve tüm işleri nasıl listeleyeceğinizi adım adım göstereceğim. Özellikle SSH ile bağlıyken ve tek bir oturumunuz varken bu komutlar çok değerli oluyor.
Linux'ta bir terminalde çalıştırdığınız her komut varsayılan olarak "ön planda" çalışır. Yani komut bitene veya siz durdurana kadar o terminal size yanıt vermez. "Arka plan" ise, komutu başlattıktan sonra terminalin kontrolünü size geri veren, komutun sessizce çalışmaya devam ettiği moddur. Job Control, bu iki durum arasında geçiş yapmanızı sağlar.
Her şey jobs komutu ile başlar. Bu komut, mevcut oturumunuzda (shell session) başlattığınız ve kontrol edebileceğiniz tüm işleri listeler.
Terminalinize şu komutu yazın:
Bash:
jobs
Eğer henüz bir iş başlatmadıysanız boş bir çıktı alırsınız. Bir iş başlattıktan sonra çalıştırırsanız, şuna benzer bir çıktı görürsünüz:
Bash:
[1]- Running sudo apt update &
[2]+ Stopped nano /etc/nginx/nginx.conf
Burada köşeli parantez içindeki sayılar iş numaralarıdır (job ID). Artı (+) işareti, en son arka plana atılan veya üzerinde işlem yapılan "mevcut işi" gösterir. Eksi (-) işareti ise bir önceki işi gösterir. "Running" çalışıyor, "Stopped" ise duraklatılmış demektir.
Diyelim ki ön planda çalışan bir komutunuz var (örneğin, bir metin editörü veya uzun süren bir işlem). Bu işlemi duraklatmak için klavyenizdeki Ctrl + Z tuş kombinasyonunu kullanırsınız.
Bu işlem, komutu durdurur (SIGTSTP sinyali gönderir) ve size terminal kontrolünü geri verir. İş artık "Stopped" durumundadır. Şimdi bu duraklatılmış işi arka planda çalıştırmak için bg komutunu kullanacağız.
Duraklatılmış işi arka plana almak için:
Bash:
bg %1
Burada %1, jobs listesinde gördüğünüz iş numarasıdır. Eğer sadece bg yazarsanız, son duraklatılan işi (artı [+] işaretli olanı) arka plana alır.
Bir komutu doğrudan arka planda başlatmak isterseniz, komutun sonuna & (ampersand) işareti ekleyebilirsiniz. Bu, işlemi hiç ön planda çalıştırmadan doğrudan arka plana atar.
Bash:
tar -czf backup.tar.gz /home/backup_folder/ &
Arka plana attığınız bir iş, eğer terminalden girdi bekliyorsa (stdin) sorun yaşayabilir. Örneğin, sudo şifresi soran veya onay bekleyen bir komutu arka plana atarsanız, işlem askıda kalacaktır. Bu tür etkileşimli komutlarda dikkatli olun.
Ayrıca, SSH oturumunuzu kapattığınızda, arka planda çalışan işlerin çoğu sonlanır (SIGHUP sinyali alır). Bunu önlemek için nohup komutunu veya screen/tmux gibi araçları kullanmanız gerekir. Bu konuya başka bir rehberde değineceğim.
Arka planda çalışan veya duraklatılmış bir işi tekrar ön plana getirmek ve kontrol etmek için fg komutunu kullanırız.
Örneğin, iş numarası 2 olan bir işi ön plana alalım:
Bash:
fg %2
Sadece fg yazmak, en son arka plana atılan işi (artı [+] işaretli olanı) ön plana getirir. İş ön plana geldiğinde, eğer duraklatılmışsa (Stopped) çalışmaya devam etmez, sizin onu devam ettirmenizi bekler. Devam ettirmek için komut satırında Enter tuşuna basmanız yeterli olabilir veya işleme bağlı olarak bir tuşa basmanız gerekebilir.
Hadi tipik bir senaryoyu birlikte yapalım:
1. Uzun süren bir komut başlatalım:
Bash:
find / -name ".log" 2>/dev/null | head -20
3. jobs yazıp iş numarasını görelim (muhtemelen [1]).
4. bg %1 yazarak bu arama işlemini arka plana alalım.
5. Terminal bize geri döndü, başka işler yapabiliriz.
6. Arka plandaki işin durumunu kontrol etmek için tekrar jobs yazabiliriz.
7. İşlem bittiğinde veya çıktısını görmek istediğimizde fg %1 diyerek ön plana alırız.
Bonus ipucu: Bir işi tamamen sonlandırmak için ön plana aldıktan sonra Ctrl+C yapabilirsiniz. Ya da doğrudan iş numarası ile kill komutunu kullanabilirsiniz:
Bash:
kill %1
Umarım bu rehber, terminaldeki verimliliğinizi artırmanıza yardımcı olur. Ben uzun komut satırı işlemlerinde, özellikle sunucu bakım betiklerini çalıştırırken sürekli bu komutları kullanıyorum. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? screen veya tmux mu tercih ediyorsunuz yoksa temel job control yetiyor mu? Deneyimlerinizi ve sorularınızı aşağıya yazmaktan çekinmeyin. Herkese sorunsuz çalışmalar!