내가 죽이고 싶은 프로세스는 다음과 같습니다.
sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6 0 0 :::80 :::* LISTEN 20570/httpd
답변1
실행 중인 프로세스가 포트를 사용하고 있는지 찾는 방법에는 여러 가지가 있습니다.
fusionr를 사용하면 수신 포트와 연결된 여러 인스턴스의 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
답변2
다음은 실행할 명령을 보여주는 한 줄의 내용입니다.
echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')
종료할 실제 프로세스 echo
로 대체합니다 .sudo
답변3
열려 있는 포트를 나열하는 세 가지 옵션을 제공합니다.제쉬~의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
with netstat
또는 with 를 lsof
사용 하는 -sTCP:LISTEN
것이지만, 위의 grep도 잡기를 선호합니다.나가는연결하다~에서특정 포트가 때때로 관심을 끌 수 있습니다. )
대신 디스플레이를 lsof
사용 하면 grep이 가능해집니다. 이 옵션은 적시에 완료되도록 강제합니다.-P
:80
:http
-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
그러나 정규식을 사용할 때 오탐(false positive)이 발생할 가능성이 종종 있으므로 초기 출력을 보고 netstat
실행할지 여부를 수동으로 결정하는 것이 좋습니다.
$ kill -KILL 1914
당신은 또한 볼 수 있습니다
나는listopenports
이것은 흥미로울 것입니다.