80 numaralı bağlantı noktasında çalışan öldürme işlemi


14

Bu öldürmek istediğim süreç:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd

Yanıtlar:


31

Hangi çalışan işlemin bir bağlantı noktası kullandığını bulmanın birkaç yolu vardır.

Kaynaştırıcı kullanarak, dinleme bağlantı noktasıyla ilişkili birden çok örneğin PID'lerini verecektir.

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

Bunu öğrendikten sonra, süreci / işlemleri durdurabilir veya öldürebilirsiniz.

Lsof kullanarak PID'leri ve daha fazla ayrıntıyı da bulabilirsiniz.

sudo lsof -i tcp:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx   1858     root    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1867 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1868 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1869 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1871 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  

80 numaralı bağlantı noktasını dinleyen soketlerle sınırlamak için (80 numaralı bağlantı noktasına bağlanan istemcilerin aksine):

sudo lsof -i tcp:80 -s tcp:listen

Onları otomatik olarak öldürmek için:

sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill

1
Kaynaştırıcının aynı zamanda -ktüm eşleşen işlemleri -iöldürme ve etkileşimli olarak öldürme (her biri için sizi uyarma) anahtarı olduğunu belirtmek isterim .
A. Wilcox

7

Çalıştırılacak komutu gösteren bir oneliner:

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

Değiştir echotarafından sudosüreç aslında öldürülmek için.


Değiştir echoiçinsudo
EliuX

Bu sadece bağlantı noktası numaramızı değiştirmek zorunda olduğumuz mükemmel cevaptır 80.
Youssof H.

4

Açık portları listelemek için üç seçenek sunulmaktadır JSH 'ler whatisonport:

netstat -anp --numeric-ports | grep ":${PORT}\>.*:" 

fuser -v "${PORT}"/tcp

lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"

netstatHızlı, özlü olduğu ve diğer kullanıcılar tarafından açılan bağlantı noktalarını listeleyebildiği için tercih ederim . (Yine de, bu tür işlemlerin adlarını ve PID'lerini listelemek için süper kullanıcı / kullanıcı ayrıcalıklarına ihtiyaç duyacaktır.)

çıktılar

$ netstat -anp --numeric-ports | grep ":80\>.*:" 
tcp6       0      0 :::80           :::*            LISTEN      1914/apache2    

$ fuser -v "80/tcp"
                     USER        PID ACCESS COMMAND
80/tcp:              root       1914 F.... apache2
                     www-data  12418 F.... apache2
...

$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2  1914     root    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
apache2 12418 www-data    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
...

Kullanımı grepiki durumda yerel tarafta sadece port eşleştirmek ve uzak bir port 80 açık bağlantılarını atlamak (Alternatif kullanmak olacaktır etmektir -lile netstatbirlikte veya, lsofkullanımına -sTCP:LISTENonlar olacak çünkü yukarıdaki greps gibi, ama ben Ayrıca yakalamak giden bağlantıları dan bazen ilgisini çekebilir verilen port,.)

İle lsofkullandığımız -Pgösterilecek :80yerine :httpgrep mümkün kılmak için. -S 2Seçenek kuvvetleri lsofzamanında tamamlayın.

Süreci öldürmek

Kullanmak istediğimizi varsayarsak netstat, PID'leri şu şekilde alabiliriz:

$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...

Ve bu PID'leri şu noktalara bile aktarabiliriz kill:

... | xargs -d '\n' kill -KILL

Ancak regexps kullanırken genellikle yanlış pozitif için bir potansiyel vardır, bu yüzden sadece ilk çıkışına bakmayı netstatve daha sonra manuel olarak çalıştırılıp çalıştırılmayacağına karar vermenizi öneririm :

$ kill -KILL 1914

Ayrıca bakınız

Ben listopenportsilgi olabilir denilen başka bir komut dosyası var .


3

Hangi işlemi öldüreceğinizi zaten öğrendiniz: işlem numarası 20570ve ikilisinin httpdçıktısının satırının sonunda yazılmış adı vardır netstat. Numaraya kill 20570veya isme göre öldürebilirsiniz, killall httpdancak bu şekilde yapılmasını tavsiye etmem.

1024'ten daha düşük bağlantı noktaları standart kullanıma sahiptir (normalde), bunları ve diğerlerini arayabilirsiniz less /etc/services. 80 numaralı bağlantı noktasının girişi bile yorumlanıyor:

http            80/tcp          www             # WorldWideWeb HTTP

Yani büyük olasılıkla bir web sunucusu. Sahip olduğunuz isim httpdve man httpdsize uygun olan Apache ikili dosyası olduğuna dair büyük bir ipucu vermelisiniz. Apache büyük oyunculardan biridir, bazı rahat yönetim programlarına sahiptir, ancak sadece bir başlatma / durdurma eylemi için bunlara ihtiyacınız yoktur.

Nane var mı? Normal bir masaüstü bilgisayarla mı? Sonra Control Centeraltına bakın Systemve tıklayın Services. Orada herhangi bir şey yapmak için yönetici olmanız gerekir. "Web sunucusu" etiketli bir şey bulana kadar aşağı kaydırın (Apache yerine lighttpd'im var ve Apache girişinin nasıl görüneceğini tam olarak bilmiyorum) ve işaretini kaldırın.

Sadece geçici olarak durdurmak istiyorsanız, konsolda deneyin

sudo service stop httpd

ve ile başlayın sudo service start httpd. hakkında bilen ve işleyebilen service --status-alltüm hizmetlerin bir listesini döndürür service. (: Dur ve bu sırayla başlatmak) Bir hizmetin bir yeniden başlatma için bir kısayoldur service --full-restart SERVICEile SERVICEhizmet örn .: adını olmak httpdApache durumunda.

Bulduğunuz programların çoğu netstatbu şekilde ele alınabilir. Bazılarının bir man sayfası bile yoktur ve bazıları nadirdir.


0

Bunu yapmanın basit bir yolu var. İlk olarak netstat tarafından 80 numaralı bağlantı noktasını kullandığınızı kontrol edin :

netstat -ntl | grep 80

Şimdi işlem adını aldınız ve işlemi killall komutuyla öldürdünüz :

killall -9 process name

'Killall' komutunu kullanmanın tehlikeleri nelerdir?
Peter Mortensen

2
killallAçıklama veya uyarı olmadan -1 için .
guntbert

1
Killall ile ilgili birkaç sorun var. Bir sorun olması durumunda dizlerini bir sisteme getirmenin yanı sıra, bağlantı noktasıyla ilişkili olmayan bir sürecin birçok örneğini de öldürebilir. Her şeyden önemlisi, killall'ın en büyük sorunu, bir Solaris kutusundaki biri onu kullanmaya çalışırsa, çalışan tüm işlemleri öldürmesidir.
Rui F Ribeiro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.