Port Numarasına Göre Bir Linux Süreci Nasıl Öldürülür
Yayınlanan: 2022-10-08Bir 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. 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
Fedora'da dnf
kullanın:
sudo dnf socat'i kurun
Manjaro'da şunları yazmanız gerekir:
sudo pacman -S socat
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 &
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 &
İ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
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}'
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
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
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
Ancak, lsof
SCTP protokolünü tanımıyor.
lsof -i sctp:7889
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
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}'
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}'
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
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
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.