포트 80에서 실행중인 프로세스 종료


14

이것은 내가 죽이고 싶은 과정입니다.

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

답변:


31

포트를 사용중인 실행중인 프로세스를 찾는 방법에는 여러 가지가 있습니다.

퓨저를 사용하면 청취 포트와 관련된 여러 인스턴스의 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

1
퓨저에는 -k일치하는 모든 프로세스를 종료하고 -i대화식으로 종료 하는 스위치 도 있습니다 (각 프로세스 마다 프롬프트 표시).
A. Wilcox

7

실행할 명령을 보여주는 oneliner는 다음과 같습니다.

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

교체 echo에 의해 sudo프로세스가 실제로 살해 할 수.


교체 echo를 위해sudo
EliuX

이것은 포트 번호를로 바꾸어야하는 완벽한 해답입니다 80.
Youssof H.

4

열린 포트를 나열하는 세 가지 옵션이 제공됩니다 JSHwhatisonport:

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대신 :httpgrep을 할 수 있도록. 이 -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관심 있는 다른 스크립트 가 있습니다.


3

이미 어떤 프로세스를 종료해야하는지 알아 냈습니다. 프로세스 번호 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 SERVICESERVICE서비스, 예를 들면 : 이름 인 httpd아파치의 경우이다.

찾은 대부분의 프로그램 netstat은 이러한 방식으로 처리 할 수 ​​있습니다. 일부는 맨 페이지를 가질 수없고 일부는 드물다.


0

이를 수행하는 간단한 방법이 있습니다. 먼저 netstat에서 포트 80을 사용중인 프로세스를 확인하십시오 .

netstat -ntl | grep 80

이제 프로세스 이름을 얻었고 killall 명령으로 프로세스를 종료하십시오 .

killall -9 process name

'killall'명령을 사용하면 어떤 위험이 있습니까?
피터 Mortensen

2
killall설명이나 경고없이 -1 .
guntbert

1
killall에는 몇 가지 문제가 있습니다. 문제가 발생했을 때 시스템에 무릎을 꿇을 수있을뿐만 아니라 포트와 관련이없는 프로세스의 여러 인스턴스를 죽일 수도 있습니다. 무엇보다도, killall의 가장 큰 문제는 Solaris 상자에있는 누군가가 사용하려고하면 실행중인 모든 프로세스를 종료한다는 것입니다.
Rui F Ribeiro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.