Linux

Port Numarasına Göre Bir Linux İşlemi Nasıl Durdurulur?

sunucu linux kernel
Share

Bir Linux sürecini öldürmek için kimliğine veya adına ihtiyacınız var. Tek bildiğin kullandığı bağlantı noktasıysa, yine de onu öldürebilir misin? Evet, birkaç farklı şekilde.

Öldürme Süreçleri

Bazen bir Linux işlemi yanıt vermeyebilir. Düzgün çalışmayı durdurabilir veya çalışmaya devam edebilir, ancak kapanma isteklerini yok sayabilir veya belleği, CPU’yu veya ağ bant genişliğini tüketmeye başlayabilir.

Sebepleriniz ne olursa olsun, Linux komut satırından bir işlemi öldürmenin yolları vardır. Klasik yöntem,   sonlandırmak istediğiniz işlemin işlem kimliğiyle kill komutunu kullanmaktır. Komutanın kill bazı yakın akrabaları var. pkillKomut, bir işlemi ada göre öldürecek killallve bir adın paylaşan kısmını bulabileceği tüm işlemleri öldürecektir.

Bir işlem hakkında tüm bildiğiniz, bilgisayarınızda bir bağlantı noktası kullanıyorsa, onu tanımlamanın ve öldürmenin hala yolları vardır. Ağ terimleriyle “bağlantı noktası”, CAT5 veya 6 ağ kablosu gibi ucunda fiş bulunan bir kablo taktığınız fiziksel bir bağlantı anlamına  gelebilir veya bir yazılım bağlantı noktası anlamına gelebilir.

Yazılım bağlantı noktası, bir ağ bağlantısının son kısmıdır. Bir aygıtın IP adresi , bilgisayarı veya diğer ağ aygıtını tanımlar. Bilgisayarın içindeki uygulamalar farklı bağlantı noktaları kullanır. Bunlar başka bir ayrıntı düzeyi sağlar. Ağ trafiği IP adresi kullanılarak doğru bilgisayara ulaşmıştır ve port adresleme kullanılarak doğru uygulamaya iletilebilir.

Bir otele gelen posta postasının sıralanıp uygun odalara teslim edilmesi gibi. IP adresi otelin sokak adresi gibidir, oda numaraları ise port numaraları gibidir.

Bir bağlantı noktasında ağ etkinliği görüyorsanız ve onu oluşturan işlemi tanımıyorsanız veya davranışı sorunlu veya şüpheliyse, işlemi sonlandırmak isteyebilirsiniz. Bildiğiniz tek şey port numarası olsa bile, süreci takip edebilir ve onu öldürebilirsiniz.

socat ile Bağlantılar Oluşturma

Öldürecek bazı bağlantılarımız olması için, socatfarklı protokoller kullanarak ağ bağlantıları oluşturmak için kullanacağız. Yüklemeniz gerekecek socat. Ubuntu’ya kurmak için şu komutu kullanın:

sudo apt install socat

Sözdizimi socatbiraz uzunsa, basittir. Kaynak ve hedef adreslerini sağlamamız gerekiyor. Bunların her biri için protokolü, IP adresini ve port numarasını sağlamamız gerekiyor. Kaynak veya hedef olarak STDIN veya STDOUT’u değiştirebiliriz.

Bu komut, 127.0.0.1 geri döngü IP adresindeki 7889 numaralı bağlantı noktasındaki bir TCP dinleme soketi ile STDOUT arasında bir bağlantı oluşturur. Ve işareti “ &”  komutu arka planda çalıştırır , böylece komut satırına erişimi koruruz.
socat tcp-listen:7889,bind=127.0.0.1 stdout &

socat sctp-listen:9999,bind=127.0.0.1 stdout &

Kill’i kullanma

Elbette, killişlemin kimliğinin ne olduğunu bildiğimiz sürece işlemi sonlandırmak için kullanabiliriz. PID’yi bulmak için komutu  lsofkullanabiliriz .

TCP protokolünü kullanan 7889 numaralı bağlantı noktasındaki işlemin ayrıntılarını listelemek için, bunun gibi -i(internet adresi) seçeneğini kullanıyoruz.

lsof -i tcp:7889

sudo kill 3141

Eğer boru kullanırsak, kendimize biraz çaba harcayabiliriz. lsofÇıkışını içine aktarır ve ilgilendiğimiz bağlantı noktasını ( 7889 ) içeren satırları aramamızı söylersekawk ve bu satırdan ikinci alanı yazdırırsak, PID’yi izole ederiz.awk

lsof -i tcp:7889 | awk '/7889/{print $2}'

Daha sonra çıktıyı kullanarak komuta awkaktarabiliriz . Komut, borulu girdisini alır ve komut satırı parametreleri olarak başka bir  komuta iletir . komutu ile kullanacağız .killxargsxargsxargskill

lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill

Herhangi bir görsel geri bildirim alamıyoruz. Tipik Linux tarzında, hiçbir haber iyi haber değildir. İşlemin sonlandırıldığını kontrol etmek isterseniz lsofbir kez daha kullanabilirsiniz.

Çünkü lsofhiçbir şey rapor etmiyor, böyle bir bağlantı olmadığını biliyoruz.

UDP protokolünü kullanarak bir işlemi, önceki komutumuzdaki “tcp” yerine “udp” ile değiştirerek kaldırabiliriz.

lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill

Ancak lsofSCTP protokolünü tanımıyor.

Bunu yapmak için sskomutu kullanabiliriz . SCTP soketlerini aramak için -S(SCTP) seçeneğini, -atüm soket türlerini aramak için (tümü) seçeneğini (dinleme, kabul etme, bağlı vb.) ve -payrıntıları listelemek için (işlemler) seçeneğini kullanıyoruz. soketi kullanarak işlem yapın.

ss -Sap

grepBu çıktıyı ve kullanarak ayrıştırabiliriz awk. Ayrıca bazı PERL regex’lerini kullanarak da ayrıştırabiliriz grep, ancak bu şekilde anlaşılması çok daha kolaydır. Bunu bir veya iki defadan fazla kullanacak olsaydınız, muhtemelen bir takma ad veya kabuk işlevi yapardınız .

Çıktıyı ssiçine  grepaktaracağız ve 7889 numaralı bağlantı noktamızı arayacağız. Çıktıyı grepiçine aktaracağız awk. ‘ de, alan sınırlayıcı olarak virgül “ ” ayarlamak için (ayırıcı dize) seçeneğini kullanıyoruz awk“pid=” içeren bir dize   ararız ve bu dizeden virgülle ayrılmış ikinci alanı yazdırırız.-F,

ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}'

Bu bize “pid=2859” dizesini verdi.

Bunu tekrar aktarabiliriz , awkalan sınırlayıcıyı eşittir işaretine “ ” ayarlayabilir ve eşittir işaretinin arkasındaki metin olacak olan bu= dizeden ikinci alanı yazdırabiliriz .

ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'

Artık işlem kimliğini izole ettik. PID’yi komut satırı parametresi olarak xargs iletmek için kullanabiliriz  .kill

ss -Sap | grep "7889" | awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill

Bu, 7889 numaralı bağlantı noktasındaki SCTP protokol soketini kullanan işlemi öldürür.

kaynaştırıcı Komutu

Komut , fuserişleri büyük ölçüde basitleştirir. Dezavantajı ise yalnızca TCP ve UDP soketleriyle çalışmasıdır. Artı tarafta, bunlar uğraşmanız gereken en yaygın iki soket türüdür. Komut , fuserkontrol ettiğimiz Ubuntu, Fedora ve Manjaro bilgisayarlarında zaten kuruluydu.

Tek yapmanız gereken -k(öldür) seçeneğini kullanmak ve bağlantı noktası ve protokolü sağlamak. (Ad alanı) seçeneğini kullanabilir -nve protokolü ve bağlantı noktasını sağlayabilir veya “eğik çizgi kısayol biçimini” kullanabilir ve bağlantı noktası numarasını ilk sıraya koyabilirsiniz.

fuser -n tcp 7889
fuser 7889/udp

Sonlandırılan işlemin port numarası, protokolü ve PID’si terminal penceresinde yazdırılır.

Önce kaynaştırıcıyı deneyin

Muhtemelen üzerinde çalıştığınız bilgisayara yüklenecektir ve protokolün TCP veya UDP olması muhtemeldir, bu nedenle en basit yolun sizin için işe yaraması için büyük bir şans var.