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 echo
tarafından sudo
süreç aslında öldürülmek için.
echo
iç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)$\)"
netstat
Hı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ı grep
iki 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 -l
ile netstat
birlikte veya, lsof
kullanımına -sTCP:LISTEN
onlar olacak çünkü yukarıdaki greps gibi, ama ben Ayrıca yakalamak giden bağlantıları dan bazen ilgisini çekebilir verilen port,.)
İle lsof
kullandığımız -P
gösterilecek :80
yerine :http
grep mümkün kılmak için. -S 2
Seçenek kuvvetleri lsof
zamanı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ı netstat
ve daha sonra manuel olarak çalıştırılıp çalıştırılmayacağına karar vermenizi öneririm :
$ kill -KILL 1914
Ben listopenports
ilgi olabilir denilen başka bir komut dosyası var .
Hangi işlemi öldüreceğinizi zaten öğrendiniz: işlem numarası 20570
ve ikilisinin httpd
çıktısının satırının sonunda yazılmış adı vardır netstat
. Numaraya kill 20570
veya isme göre öldürebilirsiniz, killall httpd
ancak 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 httpd
ve man httpd
size 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 Center
altına bakın System
ve 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-all
tü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 SERVICE
ile SERVICE
hizmet örn .: adını olmak httpd
Apache durumunda.
Bulduğunuz programların çoğu netstat
bu ş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
killall
Açıklama veya uyarı olmadan -1 için .
-k
tü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 .