kertenkerem_
· DevOps · 3 dk okuma

Bilmende Fayda Var (Linux Tips)

Bak bu yazıda bir sürü şey var. Gerçek diyorum. Okuyabilecek kadar dayanabilirsen senin için çok iyi olur, çok da iyi güzel olur. Lakin ki öyle de değildir. Kimsenin process’ine herkes karışamaz.

Kill the process be hacı beybi!
ps ax | grep <kapanacak_uygulama_adı> | grep -v grep | awk '{print $1}' | xargs kill

Sürekli çalıştırıp ardından düzenleme yapmak için kapatmanız gereken bir scriptiniz varsa yukardaki komut satırı sizi büyük bir dertten kurtarabilir.

Örneğin servis.py isimli dosyayla sürekli uğraşmanız gerekiyor. Adı üstünde “servis”, belli ki arka planda sürekli çalışacak ve hiç kapanmayacak. Taa ki siz isteyene kadar. Olur da kapatmak gerekirse yukardaki gibi bir satırlık kod, arka planda çalışan tüm PID’leri bulup tek tek kill <pid> komutu gönderme zahmetinden sizi kurtarıyor.

Şimdi bu satırı biraz açalım. Açalım ki bize de yazmaya değer bir yazı çıksın 🙂

ps ax

Linux kullananlar zaten biliyordur. Yeni başlayanlar için kopya vereyim: “ps” (process / işlem). Yani sistemde çalışan her şeyi göster bakayım komutu.

Sonrasında gelen “a” (show process for ALL users) herkesin çalışmakta olan tüm işlerini gösterir. “-a” değil sakın karıştırmayın.

Şimdi geldi bilinmeyeni bilmeye: “x” (also show processes not attached to a terminal). Yani arka planda çalışıp görünmeyenleri de gösteriver.

Buraya kadar ne oldu? Arka planda çalışan uygulamalar dahil kimsenin gizlisi saklısı kalmadı. Her şey meydanda. Bu kadar çok olunca bir şekilde ayıklamak lazım. İşte ikinci komut:

grep <kapanacak_uygulama_adı>

grep: Grep, belirtilen bir kalıpla eşleşme içeren satırlar için bir veya daha fazla girdi dosyası arar ve eşleşen satırların çıktısını verir. Yani kısaca aradığın kelime / kelime grubu / sayısal değer / ne yazdıysan onu konsol çıktılarında arar. Aslında bu doğru tabir de değil. grep’in kullanım kılavuzunu zahmet edip biraz okursanız daha net anlarsınız.

Sıkı durun, 3. komut da GREP. Sıkıldıkça grep, her derde grep, yaşasın grep!

grep -v grep 

Ne demiş bir klavye fedaisi: Grep: Grep’i Grep’le, Grep’çe, Grep’li ya da Grep’siz arama çabasıdır. Bu sözü kendimize düstur edinip konsol çıktımızdaki grep’li satırları da temizliyoruz. Sonuçta ekranda yalnızca kapatmak istediğimiz uygulamayla ilgili bilgiler kalıyor.

4. komut için esas duruşa geçin, çünkü AWK geliyor!

awk '{print $1}' 

Şimdi yazacaklarım AWK’a bir küfür gibi olacak ama en basit haliyle awk satırlardaki kelimeleri boşluklara göre ayrıştırır. LPIC sınavında bile çıkacak kadar önemli bir komuttur. Bir de yanında olmazsa olmazı SED komutu vardır. Bu ikisini bil, sonra tüm Marvel Evreni, DC Evreni ne kadar süper kahraman varsa tokatla. Türk işi tahin pekmez gibidir ikisi. GOD Mode ON! Şu örnekle ne demek istediğimi daha iyi anlarsınız:

echo "selam dostum naber?" | awk '{print $2}'
dostum

echo ile ekrana bir cümle yazdırdım ve çıktıdaki ikinci kelimeyi ayıkladım. Sonuç: “dostum” kelimesi geldi ekrana. print $2 yerine print $0 yazsaydım bu sefer “selam dostum naber?” yazacaktı, çünkü $0 çıktının tümünü verir. Siz de çeşitli denemeler yaparak bu komutu daha iyi kavrayabilirsiniz. Ben en çok csv dosyalarında istediğim sütunlara hızlıca bakmak için kullanırım. echo ” selam dostum naber?” | awk ‘{print $1″ “$3}’ bakın bakalım ne geliyor ekrana?

Kısa bir Awk güzellemesinden sonra konumuza dönelim. Komuttaki awk ‘{print $1}’, grep ile ayıkladığımız çalışan işlemlere ait PID numaralarını (process ID) döndürüyor.

xargs kill

İşe geldik sona: Xargs. Xargs ile bir komuttan gelen standart çıktıyı başka bir komuta argüman olarak yönlendirebilirsiniz. Bizim örnekte bu çıktılar PID listesi olacak: İşte feraset, işte firefox’a ait PID’ler!

ps ax | grep firefox | grep -v grep | awk '{print $1}'
10368
10432
10464
10523
10586
10618
10689
10847
13173
17819
17949
18056
18395

xargs kill ile yukarıda gördüğünüz tüm PID numaraları kill komutuna argüman olarak gidiyor. Kaç tane PID varsa o kadar kill komutu çalışıp ortalığın kill’ına koyuyor. Kill’em All, hadi sağlıcakla kalın. Eyyorlamam bu kadar.