나는 바람둥이를 사용하고 있으며 때로는 중지하라는 메시지를 표시해도 프로세스가 제대로 종료되지 않습니다.
이것에 대한 나의 길은 너무합니다 :
lsof -i tcp:8080
어떤 출력 :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 888 root 35u IPv6 780659 0t0 TCP *:http-alt (LISTEN)
java 888 root 39r IPv6 790103 0t0 TCP localhost:58916->localhost:http-alt (CLOSE_WAIT)
java 888 root 40r IPv6 792585 0t0 TCP localhost:58936->localhost:http-alt (CLOSE_WAIT)
java 888 root 75r IPv6 785553 0t0 TCP localhost:58701->localhost:http-alt (CLOSE_WAIT)
java 888 root 77r IPv6 787642 0t0 TCP localhost:58814->localhost:http-alt (CLOSE_WAIT)
java 888 root 130u IPv6 783894 0t0 TCP localhost:58686->localhost:http-alt (CLOSE_WAIT)
java 888 root 353u IPv6 780929 0t0 TCP localhost:58632->localhost:http-alt (CLOSE_WAIT)
그런 다음 실행
kill -9 pid
모든 pid 번호를 가져 와서 죽일 수있는 방법을 원합니다. 그 분야를 분리하는 방법을 모르겠습니다.
답변
에 -t
(terse) 옵션이 있습니다 lsof
. 즉, 원하는 것을 정확하게 수행하는 것 같습니다.
$ sudo lsof -ti tcp:80
1387
4538
4539
만나다 man lsof
-t specifies that lsof should produce terse output with process
identifiers only and no header - e.g., so that the output may
be piped to kill(1). -t selects the -w option.
필요한 권한이 있다고 가정하면 kill
명령 대체 를 사용하여 결과를 PID 목록으로 전달할 수 있습니다 .
kill -9 $(lsof -ti tcp:80)
답변
kill--no-run-if-empty
옵션을 잊지 마십시오 🙂
lsof -ti :8080 | xargs --no-run-if-empty kill -9
그렇게하면 kill 은 프로세스 수신 대기에서만 실행되며 직접 확인하지 않아도됩니다.
답변
lsof -i tcp:8080
출력을 생성 한 다음 | egrep -v "COMMAND PID USER"
헤더 행 을 삭제 한 다음 | awk '{print $2}'
두 번째 필드 를 인쇄하고에 | sort -n
대한 숫자를 준비하여 | uniq
각 고유 PID를 한 번만 출력합니다. 모든 것을 종합하면 다음과 같은 이점이 있습니다.
lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq
그러나 pkill -KILL tomcat
또는 killall -KILL tomcat
더 쉽습니다.
답변
@waltinator의 라이너 하나가 훌륭합니다.
나는 그것에 더 많은 맛을 더할 것입니다 :
lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq | xargs kill -9
또는
kill -9 $(lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq)
참고 : 이것은 여전히 매우 기본적이므로 실제 환경에서 더 견고하게 만들기 위해 소금과 후추를 더 추가해야 할 수도 있습니다.
답변
이것은 약간의 오류 검사를 생각 해낸 스크립트입니다.
#!/bin/bash
PORT=$1
if ! [[ "$PORT" =~ ^[0-9]+$ ]] ;
then
printf "error: '$PORT' is not a number.\n\nUsage killport <port number>\n"
exit 1
fi
PID=$(lsof -ti:$PORT)
if ! [[ "$PID" =~ ^[0-9]+$ ]] ;
then
printf "no proccess found, nothing to kill.\n"
exit 0
fi
printf "killing process $PID running on $PORT\n"
kill -9 $PID
답변
간단한 생선 껍질 기능은 다음과 같습니다.
function kill-port
set pids (lsof -ti tcp:$argv)
if test $pids
kill -9 $pids
else
echo "No proccesses on that port to kill to see for your self -- lsof -i tcp:$argv"
end
end
이 빨판을이 위치의 파일에 붙이면 ~/.config/fish/functions/kill-port.fish
좋을 것입니다. 당신은 그것을처럼 호출 할 수 있습니다kill-port 8000