背景:
近日,在用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
[[email protected] ~]# 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
[[email protected] 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
[[email protected] bin]#
3)殺掉指定程序:kill -9 PID 其中:-9表示強制
[[email protected] bin]# kill -9 17110
[[email protected] bin]# ps -ef | grep tomcat
root 17159 17076 0 13:56 pts/0 00:00:00 grep tomcat
[[email protected]aqrxZ bin]#
殺掉再檢視,對應程序就沒有了。