Shell Script İşlem Denetimi

NocturneX

Astsubay Başçavuş
Admin
Katılım
23 Kasım 2025
Mesajlar
984
Reaksiyon puanı
56
Shell scriptler, otomasyonun ve sistem yönetiminin bel kemiğini oluşturur. Ancak bu scriptlerin gücü, içindeki komutların yalnızca sıralı bir şekilde çalışmasıyla sınırlı değildir. Gerçek güç, çalışan süreçleri denetleme, yönetme ve gerektiğinde müdahale etme yeteneğinden gelir. İşlem denetimi, bir scriptin arka planda sorunsuz çalışmasını sağlamak, gereksiz kaynak tüketimini önlemek veya hata durumunda sürece müdahale etmek için kritik bir yetenektir. Başarılı bir shell script geliştiricisi, bu denetim mekanizmalarını ustalıkla kullanarak daha robust ve verimli çözümler üretebilir. Bu makalede, shell scriptler aracılığıyla süreçlerin nasıl etkin bir şekilde denetleneceğini detaylı bir şekilde inceleyeceğiz.

Arka Plan Süreçleri ve '&' Operatörü​


Bir shell script içinde bir komut çalıştırdığımızda, genellikle o komut tamamlanana kadar scriptin ilerlemesi durur. Ancak bazen bir komutun, scriptin geri kalanını engellemeden arka planda çalışmasını isteriz. İşte burada '&' operatörü devreye girer. Bir komutun sonuna '&' eklemek, o komutu bir arka plan süreci olarak başlatır ve scriptin hemen bir sonraki komuta geçmesini sağlar. Örneğin, `uzun_suren_islem.sh &` şeklinde bir kullanım, betiğin o işlemi arka plana atarak kendi çalışmasına devam etmesini sağlar. Bu, özellikle birden fazla bağımsız görevin eş zamanlı olarak yürütülmesi gereken durumlarda büyük bir verimlilik artışı sunar. Ancak arka plan süreçlerinin takibi ve yönetimi de bir o kadar önemlidir.

'jobs', 'fg', 'bg' Komutları ile İş Yönetimi

Arka planda başlattığımız süreçleri yönetmek için `jobs` komutu vazgeçilmezdir. Bu komut, geçerli kabuk oturumumuzda çalışan tüm arka plan işlerini listeler ve onlara birer iş numarası atar. Örneğin, `jobs -l` komutuyla PID (Process ID) bilgileriyle birlikte daha detaylı bir çıktı alabiliriz. Eğer arka plandaki bir işi tekrar ön plana almak istersek, `fg %iş_numarası` komutunu kullanırız. Aksine, ön planda askıya alınmış (Ctrl+Z ile durdurulmuş) bir işi arka plana göndermek için `bg %iş_numarası` komutu işe yarar. Bu komutlar, kullanıcının süreçler üzerindeki anlık kontrolünü artırarak daha dinamik bir çalışma ortamı sunar. Bu nedenle, bu komutların etkin kullanımı scriptlerin esnekliğini önemli ölçüde artırır.

'kill' Komutu ve Sinyaller

Bir sürecin çalışmasını durdurmak veya ona sinyal göndermek için `kill` komutu kullanılır. `kill` komutu aslında bir PID'ye (Process ID) sinyal gönderir. En sık kullanılan sinyallerden biri SIGTERM (15) olup, sürece "temiz bir şekilde kapan" der. Çoğu program bu sinyali alıp mevcut işini tamamlayıp düzgün bir şekilde kapanmaya çalışır. Eğer bir süreç SIGTERM'e yanıt vermezse veya acil bir durdurma gerekiyorsa, SIGKILL (9) sinyali kullanılabilir (`kill -9 PID`). Bu sinyal, sürecin anında ve zorla sonlandırılmasını sağlar, ancak veri kaybına yol açabilir. Ek olarak, `killall` komutu belirli bir isme sahip tüm süreçleri, `pkill` ise daha gelişmiş desen eşleştirmeleriyle süreçleri sonlandırmak için kullanılır. Başka bir deyişle, `kill` ailesi komutları, süreç yönetimi için hayati araçlardır.

'nohup' ve 'disown' ile Sürekli Çalışan Süreçler

Bir terminal oturumunu kapattığınızda, o oturumda başlattığınız tüm süreçler genellikle sonlanır. Ancak `nohup` komutu, bir sürecin terminal oturumu kapansa bile arka planda çalışmaya devam etmesini sağlar. Örneğin, `nohup uzun_suren_script.sh &` komutuyla başlattığınız script, siz çıkış yapsanız bile çalışmaya devam edecektir. Çıktısı ise `nohup.out` dosyasına yönlendirilir. Benzer bir şekilde, `disown` komutu, hali hazırda çalışmakta olan bir arka plan işini kabuk oturumundan ayırır. `disown -h %iş_numarası` komutu, belirli bir işin HUP sinyallerini (terminal kapanışı) görmezden gelmesini sağlar. Bu iki komut, sunucu üzerinde veya uzun süreli görevler için kullanılan scriptlerin kesintisiz çalışmasını garanti altına almak açısından büyük önem taşır.

'ps' ve 'top' ile Süreç İzleme

Sistemde çalışan süreçleri görüntülemek ve izlemek, işlem denetiminin temel bir parçasıdır. `ps` komutu, anlık olarak çalışan süreçlerin bir "anlık görüntüsünü" sunar. `ps aux` gibi yaygın kullanımlarla tüm kullanıcıların süreçlerini detaylı bir şekilde görebiliriz. Bu komut, PID, CPU ve bellek kullanımı gibi bilgileri listeler. Bununla birlikte, `top` komutu daha dinamik bir süreç izleme aracıdır. `top`, süreçlerin CPU, bellek ve diğer kaynak kullanımını gerçek zamanlı olarak gösteren interaktif bir arayüz sunar. `htop` gibi alternatifler ise daha kullanıcı dostu bir arayüz ve ek özellikler sunar. Bu araçlar sayesinde, scriptlerinizin veya sisteminizdeki diğer süreçlerin kaynak tüketimini anında gözlemleyebilir, olası performans darboğazlarını tespit edebilirsiniz.

Otomasyon ve Güvenli İşlem Denetimi Pratikleri​


Shell scriptlerde işlem denetimi sadece komutları çalıştırmakla kalmaz, aynı zamanda bu süreçlerin güvenli ve otomatik bir şekilde yönetilmesini de içerir. Örneğin, bir scriptin hata durumunda kendi başlattığı süreçleri temizlemesi veya belirli bir süreden sonra cevap vermeyen süreçleri sonlandırması gerekebilir. `trap` komutu, bir scriptin sinyaller (örneğin Ctrl+C veya çıkış sinyalleri) aldığında belirli bir aksiyon almasını sağlar. Sonuç olarak, bu, scriptin beklenmedik kapanışlarda bile temiz bir şekilde kaynakları serbest bırakmasına yardımcı olur. Ayrıca, `wait` komutu, arka plandaki bir sürecin tamamlanmasını beklemek için kullanılır. Etkin işlem denetimi pratikleri, scriptlerinizin kararlılığını ve güvenilirliğini artırırken, sistem kaynaklarının daha verimli kullanılmasına da olanak tanır.
 
Geri
Üst Alt