我尝试使用tomcat /bin目录中的./shutdown.sh关闭tomcat。 但发现服务器没有正常关闭。 因此我无法重启我的tomcat正在端口8080上运行。
我想杀死在8080上运行的tomcat进程。 我首先想要在特定端口(8080)上运行进程列表,以便选择要杀死的进程。
shell脚本可能重复以杀死侦听端口3000的进程?
此fuser 8080/tcp将打印您在该端口上绑定的进程的PID。
而这个fuser -k 8080/tcp会杀死这个过程。
仅适用于Linux。更普遍的是使用lsof -i4(或IPv6用于6)。
这是否也关闭了一个可能连接到8080的套接字?
当然,处理完成后所有文件描述符都会关闭。
它没有正确关闭端口。在父进程被终止后,端口进入TIME_WAIT状态。操作系统最终将在大约60秒后完全关闭端口。这意味着您不能重复使用该端口至少60秒(除非您将重用选项提供给套接字)。
我使用linux,我得到bash: fuser: command not found。
在达尔文上,必须使用不同版本的fuser。只需要一个文件,不支持-k。
'fuser -k -n tcp 8080'也会杀死这个过程
谢谢这对我有用
@dbliss fuser是psmisc的一部分。如果你得到fuser: command not found,安装psmisc。对于CentOS / RHEL 7,运行sudo yum install psmisc
要列出监听端口8080的任何进程:
lsof -i:8080
要杀死侦听端口8080的任何进程:
kill $(lsof -t -i:8080)
或者更猛烈地:
kill -9 $(lsof -t -i:8080)
(-9对应于SIGKILL - terminate immediately/hard kill信号:请参阅杀死信号列表以及kill命令中-9选项的用途是什么?如果没有为kill指定信号,则TERM信号也为-15或soft kill被发送,有时不足以杀死进程。)
kill:usage:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...或kill -l [sigspec]这是我在执行命令时得到的内容
@SudhirBelagali用超级用户sudo做了你
也在我的Mac上工作
我想补充一点,有时你没有权限看到进程ID,在这种情况下你需要做sudo lsof -i:8080。
为什么第二个提示更暴力?
@Webman更猛烈地意味着它很好地杀死了我的网络浏览器:(这是Gal Bracha的最佳解决方案:kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)
@Webman -9对应SIGKILL - terminate immediately/hard kill:请参阅kill命令列表以及kill命令中-9选项的用途是什么?)
基于此,使用sudo:killport() {sudo kill -9 $(sudo lsof -t -i:${1} -sTCP:LISTEN)}然后killport 8080
使用该命令
sudo netstat -plten |grep java
使用grep java作为tomcat使用java作为其进程。
它将显示具有端口号和进程ID的进程列表
tcp6 0 0 :::8080 :::* LISTEN
1000 30070621 16085/java
/java之前的数字是进程ID。现在使用kill命令终止进程
kill -9 16085
-9暗示该过程将被强行杀死。
您可能希望添加一个可能需要root权限才能通过netstat获取进程名称。
@JonasWielicki你可以看到你拥有的拥有root权限的人。
我需要netstat的root权限。有没有办法真正了解这个过程来自哪里?据我所知,我关闭了所有应用程序,但它可能来自终端窗口,我无意中将进程推送到后台任务。也许我应该运行终端命令'ps'来先查看所有进程...
谢谢,杀死$(lsof -t -i:8080)
我会在特定端口上添加这个单行只能杀死LISTEN:
kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)
我认为这应该是最好的答案。谢谢@Gal Bracha
这是最好的解决方案,因为它也不会杀死我的浏览器!
您可以使用lsof命令。
这里的端口号是8090
lsof -i:8090
此命令返回此端口上的打开进程列表。
就像是…
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 75782 eoin 5u IPv6 0x01c1c234 0t0 TCP localhost:8090 (LISTEN)
要释放端口,请使用它终止进程(进程ID为75782)...
kill -9 75782
这个对我有用。
这是原帖子的链接:链接
强行杀死进程你需要使用-9像kill -9 75782;因为有时很少有进程不会被杀死
这也是在Mac OS上工作的人
如果要终止在端口号8080上运行的进程,则首先需要找到8080端口进程标识号(PID),然后将其终止。运行以下命令查找8080端口号PID:
sudo lsof -t -i:8080
这里,
sudo - 命令管理员权限(用户ID和密码)。
lsof - 文件列表(也用于列出相关进程)
-t - 仅显示进程ID
-i - 仅显示与Internet连接相关的进程
:8080 - 仅显示此端口号中的进程
因此,您现在可以使用以下命令轻松终止PID:
sudo kill -9
这里,
kill - 命令杀死进程
-9 - 有力地
您可以使用以下命令使用一个命令终止特定端口上的进程:
sudo kill -9 $(sudo lsof -t -i:8080)
有关更多信息,请参阅以下链接
如何在linux上的特定端口上终止进程
谢了哥们。 sudo kill -9 $(sudo lsof -t -i:8080)为我工作
这将打印到stdout 上运行的所有内容的进程ID:
fuser -n tcp
它还会向stderr打印一些东西,所以:
fuser -n tcp 2> /dev/null
然后,我们可以将这些进程ID提供给kill命令:
sudo kill $(fuser -n tcp 2> /dev/null)
如果你做了很多,你也可以将它放在一个函数中:
function killport() {
sudo kill $(fuser -n tcp $1 2> /dev/null)
}
要知道在特定端口上运行的服务的pid:
netstat -tulnap | grep :*port_num*
您将获得该过程的描述。现在使用kill或kill -9 pid。容易被杀死。
例如
netstat -ap | grep :8080
tcp6 0 0 :::8080 :::* LISTEN 1880/java
现在:
kill -9 1880
请记住以root运行所有命令
获取任务的PID并将其杀死。
lsof -ti:8080 | xargs kill
试试这样,
sudo fuser -n tcp -k 8080
lsof -i tcp:8000
此命令列出有关在端口8000中运行的进程的信息
kill -9 [PID]
此命令会终止进程
我刚刚注意到我几周前意外地投了这个,如果你稍微编辑你的anwer我应该能够删除它
Linux:首先,如果你知道端口,你可以找到这个命令的PID:
netstat -tulpn
例:-
Local Address Foreign Address State PID/Program name
:::3000 :::* LISTEN 15986/node
然后你进行杀戮过程。运行以下命令:
kill -9 PID
示例: -
杀了-9 15986
Linux:如果您知道端口,则可以使用此命令:
netstat -plten | grep LISTEN | grep 8080
AIX:
netstat -Aan | grep LISTEN | grep 8080
然后,您将获取第一列(例如:f100050000b05bb8)并运行以下命令:
rmsock f100050000b05bb8 tcpcb
杀人过程。
rmsock:找不到命令
kill -9 `fuser 8080/tcp|xargs -n 1`,此命令还会终止使用TCP连接侦听端口8080的进程
您可以知道系统中运行的所有端口的列表及其详细信息(pid,地址等):
netstat -tulpn
您可以通过以下命令提供端口号来了解特定端口号的详细信息:
sudo netstat -lutnp | grep -w '{port_number}'
例如:sudo netstat -lutnp | grep -w'8080'
详细信息将提供如下:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
如果你想使用pid杀死进程,那么:kill -9 {PID}
如果要使用端口号终止进程:fuser -n tcp {port_number}
如果您无法访问任何内容,请使用sudo。
选择端口号并在netstat命令中应用grep,如下所示
netstat -ap | grep :7070
控制台输出
tcp 0 0 :::7070 :::* LISTEN 3332/java
基于PID(进程标识号)终止服务
kill -9 3332
sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp
结果:
80 / tcp:1858 1867 1868 1869 1871
一个一个地杀死进程
杀死-9 1858
以@ veer7所说的为基础:
如果你想知道端口上的内容,请在杀死之前执行此操作。
$ sudo netstat -plten |grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1000 906726 25296/java
tcp6 0 0 :::8009 :::* LISTEN 1000 907503 25296/java
tcp6 0 0 :::8080 :::* LISTEN 1000 907499 25296/java
$ ps 25296
PID TTY STAT TIME COMMAND
25296 ? Sl 0:16 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dcatalina.base=/hom
使用'ps'和netstat报告的进程数
与Git Bash的其他方式:
stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
在Windows中,它将是netstat -ano | grep"8080",我们收到以下消息TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076
我们可以使用taskkill /F /PID 10076终止PID
问题显然是要求Linux帮助;不是Windows。