背景:
近日,在用idea撸码的时候,启动了多个tomcat,此时idea突然奔溃了(莫名其妙就消失不见了,迷之尴尬...)。然后,我只能重新打开idea,再次启动tomcat的时候,提示"11:23 Error running 'tomcat7': Address localhost:1091 is already in use"的错误日志,发现端口被占用了,tomcat在idea奔溃的时候,没有被正常关闭。于是,就引出了如下问题:
windows操作系统进程
一. tasklist命令:
1) 使用帮助:tasklist /?
C:\Users\wangdy>tasklist /?
TASKLIST [/S system [/U username [/P [password]]]]
[/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
描述:
该工具显示在本地或远程机器上当前运行的进程列表。
参数列表:
/S system 指定连接到的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果省略,则
提示输入。
/M [module] 列出当前使用所给 exe/dll 名称的所有任务。
如果没有指定模块名称,显示所有加载的模块。
/SVC 显示每个进程中主持的服务。
/APPS 显示应用商店应用及其关联的进程。
/V 显示详细任务信息。
/FI filter 显示一系列符合筛选器
指定条件的任务。
/FO format 指定输出格式。
有效值: "TABLE"、"LIST"、"CSV"。
/NH 指定列标题不应该
在输出中显示。
只对 "TABLE" 和 "CSV" 格式有效。
/? 显示此帮助消息。
筛选器:
筛选器名称 有效运算符 有效值
----------- --------------- --------------------------
STATUS eq, ne RUNNING | SUSPENDED
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号
SESSIONNAME eq, ne 会话名称
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 小时,
mm - 分钟,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用(以 KB 为单位)
USERNAME eq, ne 用户名,格式为
[域\]用户
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
模块 eq, ne DLL 名称
注意: 当查询远程计算机时,不支持 "WINDOWTITLE" 和 "STATUS"
筛选器。
Examples:
TASKLIST
TASKLIST /M
TASKLIST /V /FO CSV
TASKLIST /SVC /FO LIST
TASKLIST /APPS /FI "STATUS eq RUNNING"
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U 域\用户名 /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH
TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"
2) 管道过滤查找对应任务
使用管道“|”符合配合findstr 命令使用:
C:\Users\wangdy>tasklist | findstr java
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
java.exe 4264 Console 1 5,264 K
java.exe 1200 Console 1 97,528 K
java.exe 836 Console 1 1,680 K
java.exe 5772 Console 1 1,688 K
java.exe 8496 Console 1 16,276 K
java.exe 11152 Console 1 125,112 K
二. netstat命令:
1)查看所有系统进程netstat -ano
C:\Users\wangdy>netstat -ano
活动连接
协议 本地地址 外部地址 状态 PID
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1136
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:1091 0.0.0.0:0 LISTENING 1200
TCP 0.0.0.0:1095 0.0.0.0:0 LISTENING 8496
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 4400
TCP 0.0.0.0:8009 0.0.0.0:0 LISTENING 8496
TCP 0.0.0.0:8081 0.0.0.0:0 LISTENING 1200
TCP 0.0.0.0:8085 0.0.0.0:0 LISTENING 8496
………… ………… ………… …………
2)过滤出指定进程
C:\Users\wangdy>netstat -ano | findstr 8081
TCP 0.0.0.0:8081 0.0.0.0:0 LISTENING 1200
三. taskkill命令:
1)杀掉被占用端口的进程
先使用netstat -nao | findstr 1095查出指定端口的进程信息(PID)
C:\Users\wangdy>netstat -nao | findstr 1095
协议 本地地址 外部地址 状态 PID
TCP 0.0.0.0:1095 0.0.0.0:0 LISTENING 14528
TCP [::]:1095 [::]:0 LISTENING 14528
根据查询到的PID杀掉指定进程
命令:taskkill /f /pid 指定进程号(PID) 其中:/f表示强制
C:\Users\wangdy>taskkill /f /pid 14528
成功: 已终止 PID 为 14528 的进程。
这样,windows下我们某些端口号被进程占用后,就可以杀掉了,杀掉后再次重启就没这个异常了,比如tomcat端口等。
linux上操作系统进程
linux大家常用,此处引生下就好了:
1)查看系统进程: ps -ef
[root@iZ2zean9vwo40c7sg3aqrxZ ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Apr12 ? 00:00:04 /sbin/init
root 2 0 0 Apr12 ? 00:00:00 [kthreadd]
root 3 2 0 Apr12 ? 00:00:00 [migration/0]
root 4 2 0 Apr12 ? 00:00:10 [ksoftirqd/0]
root 5 2 0 Apr12 ? 00:00:00 [stopper/0]
root 6 2 0 Apr12 ? 00:00:15 [watchdog/0]
root 7 2 0 Apr12 ? 00:12:35 [events/0]
root 8 2 0 Apr12 ? 00:00:00 [events/0]
root 9 2 0 Apr12 ? 00:00:00 [events_long/0]
root 10 2 0 Apr12 ? 00:00:00 [events_power_ef]
root 11 2 0 Apr12 ? 00:00:00 [cgroup]
root 12 2 0 Apr12 ? 00:00:00 [khelper]
root 13 2 0 Apr12 ? 00:00:00 [netns]
root 14 2 0 Apr12 ? 00:00:00 [async/mgr]
………… …………
2)管道过滤指定进程: | grep
[root@iZ2zean9vwo40c7sg3aqrxZ bin]# ps -ef | grep tomcat
UID PID PPID C STIME TTY TIME CMD
root 17110 1 83 13:53 pts/0 00:00:06 /usr/local/jdk8/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat8 -Dcatalina.home=/usr/local/tomcat8 -Djava.io.tmpdir=/usr/local/tomcat8/temp org.apache.catalina.startup.Bootstrap start
root 17129 17076 0 13:53 pts/0 00:00:00 grep tomcat
[root@iZ2zean9vwo40c7sg3aqrxZ bin]#
3)杀掉指定进程:kill -9 PID 其中:-9表示强制
[root@iZ2zean9vwo40c7sg3aqrxZ bin]# kill -9 17110
[root@iZ2zean9vwo40c7sg3aqrxZ bin]# ps -ef | grep tomcat
root 17159 17076 0 13:56 pts/0 00:00:00 grep tomcat
[root@iZ2zean9vwo40c7sg3aqrxZ bin]#
杀掉再查看,对应进程就没有了。
END