Port Numarasına Göre Bir Linux Süreci Nasıl Öldürülür

Yayınlanan: 2022-10-08
Bir bash istemi gösteren Linux dizüstü bilgisayar
fatmawati achmad zaenuri/Shutterstock.com

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.

Linux Terminalinden İşlemler Nasıl Öldürülür
İLGİLİ Linux Terminalinden İşlemler Nasıl Öldürülür

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. kill komutunun bazı yakın akrabaları var. pkill komutu, bir işlemi isme göre öldürür ve killall , bir ismin paylaşım kısmını bulabildiği tüm işlemleri öldürür.

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ı 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 olsun diye, farklı protokoller kullanarak ağ bağlantıları oluşturmak için socat kullanacağız. socat yüklemeniz gerekecek. Ubuntu'ya kurmak için şu komutu kullanın:

 sudo uygun kurulum socat 

Ubuntu'da socat kurulumu

Fedora'da dnf kullanın:

 sudo dnf socat'i kurun 

Socat'ı Fedora'ya yükleme

Manjaro'da şunları yazmanız gerekir:

 sudo pacman -S socat 

Manjaro'da socat kurulumu

socat sözdizimi biraz 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şimimizi koruruz.

 socat tcp-dinle:7889,bind=127.0.0.1 stdout & 

socat ile dinleme TCP soket bağlantısı oluşturma

Farklı protokoller kullanan küçük bir soket seçimimiz olması için iki bağlantı daha oluşturacağız. Bir UDP bağlantısı ve bir SCTP bağlantısı oluşturacağız. Komutun değişen tek kısmı protokoldür.

 socat udp-dinle:7889,bind=127.0.0.1 stdout &
 socat sctp-dinle:9999,bind=127.0.0.1 stdout & 

socat ile dinleme UDP ve SCTP soket bağlantıları oluşturma

İLGİLİ: TCP ve UDP Arasındaki Fark Nedir?

Kill'i kullanma

Elbette, işlemin kimliğinin ne olduğunu bildiğimiz sürece işlemi sonlandırmak için kill kullanabiliriz. PID'yi bulmak için lsof komutunu kullanabiliriz.

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 

Belirli bir bağlantı noktası ve protokolü kullanan bir işlemin ayrıntılarını göstermek için lsof kullanma

Bu işlemin PID'si 3141'dir ve devam edip bunu kill ile kullanabiliriz:

 sudo öldürmek 3141

Eğer boru kullanırsak, kendimize biraz çaba harcayabiliriz. lsof çıktısını awk aktarır ve awk ilgilendiğimiz bağlantı noktasını (7889) içeren satırları aramasını ve bu satırdan ikinci alanı yazdırmasını söylersek, PID'yi izole ederiz.

 lsof -i tcp:7889 | awk '/7889/{2$ yazdır}' 

lsof çıktısını awk'ye aktarma

Daha sonra xargs kullanarak awk çıktısını kill komutuna aktarabiliriz. xargs komutu, borulu girdisini alır ve komut satırı parametreleri olarak başka bir komuta iletir. kill komutuyla xargs kullanacağız.

 lsof -i tcp:7889 | awk '/7889/{baskı $2}' | xargs öldürür 

Lsof çıktısını awk'ye ve awk'dan xargs'a almak ve öldürmek için boruları kullanma

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 istiyorsanız, bir kez daha lsof kullanabilirsiniz.

 lsof -i tcp:7889 

Başarı olmadan belirli bir bağlantı noktası ve protokolü kullanarak bir işlemin ayrıntılarını aramak için lsof kullanma

lsof hiçbir şey bildirmediği için 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/{baskı $2}' | xargs öldürür 

UDP soketi için lsof çıktısını awk'ye ve awk'dan xargs'a ve kill'e almak için boruları kullanma

Ancak, lsof SCTP protokolünü tanımıyor.

 lsof -i sctp:7889 

lsof, SCTP protokolüyle çalışmıyor

Bunu yapmak için ss komutunu kullanabiliriz. SCTP soketlerini aramak için -S (SCTP) seçeneğini, tüm soket türlerini (dinleme, kabul etme, bağlı vb.) aramak için -a (tümü) seçeneğini ve -p (işlemler) seçeneğini kullanıyoruz. soketi kullanarak işlemin ayrıntılarını listelemek için.

 ss -Sap 

ss ile bir SCTP soketi kullanarak bir işlemin ayrıntılarını yazdırma

Bu çıktıyı grep ve awk kullanarak ayrıştırabiliriz. Ayrıca grep ve bazı PERL regex'lerini kullanarak da ayrıştırabiliriz, 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ı ss'den ss aktaracağız ve grep numaralı bağlantı noktamızı arayacağız. Çıktıyı awk grep aktaracağız. awk 'da, alan sınırlayıcı olarak virgül “ , ” ayarlamak için -F (ayırıcı dize) seçeneğini kullanıyoruz. “pid=” içeren bir dize ararız ve bu dizeden virgülle ayrılmış ikinci alanı yazdırırız.

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

PID dizesini çıkarmak için ss, grep ve awk'yi bağlamak için boruları kullanma

Bu bize "pid=2859" dizesini verdi.

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

 ss -Sap | grep "7889" | awk -F',' '/pid=/{yazdır 2$}' | awk -F'=' '{baskı $2}' 

PID'yi çıkarmak için ss, grep ve awk'yi iki kez bağlamak için boruları kullanma

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

 ss -Sap | grep "7889" | awk -F',' '/pid=/{yazdır 2$}' | awk -F'=' '{baskı $2}' | xargs öldürür 

SCTP yuva işlemini sonlandırmak için ss, grep, awk ve xargs içeren borular kullanma

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

kaynaştırıcı Komutu

fuser komutu, iş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. fuser komutu, kontrol ettiğimiz Ubuntu, Fedora ve Manjaro bilgisayarlarında zaten kuruluydu.

Tek yapmanız gereken -k (kill) seçeneğini kullanmak ve bağlantı noktası ve protokolü sağlamak. -n (ad alanı) seçeneğini kullanabilir ve 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.

 kaynaştırıcı -n tcp 7889
 kaynaştırıcı 7889/udp 

TCP ve UDP soketlerini kullanarak işlemleri silmek için füzer komutunu kullanma

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.