Port Numarasına Göre Bir Linux İşlemi Nasıl Durdurulur?
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. pkill
Komut, bir işlemi ada göre öldürecek killall
ve 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, socat
farklı 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 socat
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.
&
” 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, kill
işlemin kimliğinin ne olduğunu bildiğimiz sürece işlemi sonlandırmak için kullanabiliriz. PID’yi bulmak için komutu lsof
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
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 awk
aktarabiliriz . Komut, borulu girdisini alır ve komut satırı parametreleri olarak başka bir komuta iletir . komutu ile kullanacağız .kill
xargs
xargs
xargs
kill
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 lsof
bir kez daha kullanabilirsiniz.
Çünkü lsof
hiç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 lsof
SCTP protokolünü tanımıyor.
Bunu yapmak için ss
komutu kullanabiliriz . SCTP soketlerini aramak için -S
(SCTP) seçeneğini, -a
tüm soket türlerini aramak için (tümü) seçeneğini (dinleme, kabul etme, bağlı vb.) ve -p
ayrıntıları listelemek için (işlemler) seçeneğini kullanıyoruz. soketi kullanarak işlem yapın.
ss -Sap
grep
Bu çı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ı ss
içine grep
aktaracağız ve 7889 numaralı bağlantı noktamızı arayacağız. Çıktıyı grep
iç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 , awk
alan 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 , fuser
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. Komut , fuser
kontrol 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 -n
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.
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.