天天看點

windows/linux程序操作

背景:
    近日,在用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]# 
           

殺掉再檢視,對應程序就沒有了。

END