今天一不小心關掉了bash shell, 發現生成本地靜態服務器的后臺進程沒有關閉。然而jobs
和 fg %1
命令已經找不到進程,且我只記住了port,忘記了這個后臺進程的PID,所以在網上google 了老半天解決方式,其中大多數命令是 Linux 系統或 Mac 系統才有,而Windows 系統上的bash shell 沒有,比如下面兩個命令:
$ pgrep wget #wget 指的應用程序名稱
1234
$ lsof -wni tcp:3000
$ fuser -k 3000/tcp
在試了眾多命令之后,突然發現有一個命令會在bash shell 中產生亂碼,而且其中某些命令參數是bash shell 沒有的。
輸出如下圖:
亂碼.PNG
亂碼可能由于之前bash shell設置了編碼的緣故,所以我打開了Windows 的命令行工具 cmd在中輸入和上面同樣的命令,得到一個關于netstat 命令參數的中文說明。閱讀過后我將命令寫成下面的方式:(這個命令在bash shell中可以正常顯示)
netstat -naop TCP
輸出如下圖:
Windows 進程信息.PNG
這樣就可以找到port 為3000 的PID為7392。但是得到的這個PID 是WINPID,我們還要再將這個PID 在bash shell通過如下命令進行一個查找。得到如下結果
ps aux | grep 7392
結果如圖:
bash 獲取進程.PNG
bash 獲取詳細進程信息.PNG
這樣就找到了真正的PID為7444 了,再 $ kill 7444
就大功告成。