Yanıtlar:
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
Ç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.
echoiçinsudo
80.
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.)
$ 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.
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
Ben listopenportsilgi olabilir denilen başka bir komut dosyası var .
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.
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
killallAçıklama veya uyarı olmadan -1 için .
-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 .