답변:
포트를 사용중인 실행중인 프로세스를 찾는 방법에는 여러 가지가 있습니다.
퓨저를 사용하면 청취 포트와 관련된 여러 인스턴스의 PID를 제공합니다.
sudo apt-get install psmisc
sudo fuser 80/tcp
80/tcp: 1858 1867 1868 1869 1871
알아 낸 후에 프로세스를 중지하거나 종료 할 수 있습니다.
lsof를 사용하여 PID 및 자세한 내용을 찾을 수도 있습니다.
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에서 수신 대기 하는 소켓으로 제한하려면 (포트 80에 연결하는 클라이언트와 반대) :
sudo lsof -i tcp:80 -s tcp:listen
그들을 자동으로 죽이려면 :
sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill
실행할 명령을 보여주는 oneliner는 다음과 같습니다.
echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')
교체 echo
에 의해 sudo
프로세스가 실제로 살해 할 수.
echo
를 위해sudo
80
.
열린 포트를 나열하는 세 가지 옵션이 제공됩니다 JSH 의 whatisonport
:
netstat -anp --numeric-ports | grep ":${PORT}\>.*:"
fuser -v "${PORT}"/tcp
lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"
netstat
빠르고 간결하며 다른 사용자가 연 포트를 나열 할 수 있기 때문에 선호 합니다. (그러한 프로세스의 이름과 PID를 나열하려면 여전히 수퍼 유저 / 사용자 권한이 필요합니다.)
$ 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)
...
의 사용 grep
이가지 경우에 로컬 측면에만 포트와 일치하고, 원격 포트 80에 열려있는 연결을 건너 (대안은 사용하는 것입니다 -l
함께 netstat
하거나, lsof
사용에 -sTCP:LISTEN
그들이 있기 때문에 위의 greps 좋아하지만, 주어진 포트 에서 나가는 연결 을 잡을 수도 있습니다.
함께 lsof
우리는 사용 -P
표시하는 :80
대신 :http
grep을 할 수 있도록. 이 -S 2
옵션은 lsof
적시에 완료됩니다.
를 사용한다고 가정하면 다음 netstat
과 같이 PID를 가져올 수 있습니다.
$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...
그리고 PID를 kill
다음 과 같이 전달할 수도 있습니다 .
... | xargs -d '\n' kill -KILL
그러나 정규 표현식을 사용할 때 종종 오 탐지 가능성이 있으므로 초기 출력을보고 netstat
수동으로 실행할지 여부를 결정하는 것이 좋습니다 .
$ kill -KILL 1914
listopenports
관심 있는 다른 스크립트 가 있습니다.
이미 어떤 프로세스를 종료해야하는지 알아 냈습니다. 프로세스 번호 20570
이고 이진 파일 httpd
의 출력 줄 끝에 작성된 이름 이 netstat
있습니다. 번호 kill 20570
나 이름으로 죽일 수는 killall httpd
있지만 그렇게하지 않는 것이 좋습니다.
1024보다 낮은 포트는 표준화 된 사용 (일반적으로)을 사용 less /etc/services
합니다. 포트 80에 대한 항목도 주석 처리됩니다.
http 80/tcp www # WorldWideWeb HTTP
따라서 아마도 웹 서버 일 것입니다. 당신이 가지고있는 이름입니다 httpd
그리고 man httpd
당신이있는 맞는 아파치 바이너리라는 큰 힌트를 제공해야합니다. 아파치 (Apache)는 대기업 중 하나이며, 사용 가능한 편안한 관리 프로그램이 있지만 시작 / 정지 조치를 위해 필요하지는 않습니다.
민트 있어요? 일반 데스크탑이 있습니까? 그런 다음 Control Center
아래 System
를보고을 클릭하십시오 Services
. 거기에서 무엇이든하려면 관리자 여야합니다. "webserver"라는 레이블이 붙은 것을 찾을 때까지 아래로 스크롤하십시오 (Apache 대신 lighttpd가 있고 Apache 항목의 모양을 정확히 알지 못합니다).
콘솔에서 일시적으로 중지하려는 경우
sudo service stop httpd
로 시작하십시오 sudo service start httpd
. 알고 있고 처리 할 수있는 service --status-all
모든 서비스 목록을 반환합니다 service
. (이다 : 정지 순서에 시작) 서비스를 다시 시작에 대한 바로 가기입니다 service --full-restart SERVICE
과 SERVICE
서비스, 예를 들면 : 이름 인 httpd
아파치의 경우이다.
찾은 대부분의 프로그램 netstat
은 이러한 방식으로 처리 할 수 있습니다. 일부는 맨 페이지를 가질 수없고 일부는 드물다.
이를 수행하는 간단한 방법이 있습니다. 먼저 netstat에서 포트 80을 사용중인 프로세스를 확인하십시오 .
netstat -ntl | grep 80
이제 프로세스 이름을 얻었고 killall 명령으로 프로세스를 종료하십시오 .
killall -9 process name
killall
설명이나 경고없이 -1 .
-k
일치하는 모든 프로세스를 종료하고-i
대화식으로 종료 하는 스위치 도 있습니다 (각 프로세스 마다 프롬프트 표시).