2013-02-19 39 views
1

我試圖自動化我一次又一次面對的工作之一。 有一些端口,有時不被一些以前的工作正確地關閉..關閉所有進程從外殼拿着一個給定的端口

比方說,端口5000,5001

我想要做的就是看這些端口是否打開

,並殺死這些如果他們是開放

所以現在,我做

lsof -i :5000 

端口
kill -9 pid1 
    kill -9 pid2 

等..

有沒有辦法通過5000和5001作爲參數,並自動執行此過程

回答

2

如果您想在使用它時自動執行此操作,請執行下列操作。

創建一個bash腳本,例如把它稱作「killMyPorts」,並添加以下內容:

#!/bin/bash 
kill -9 `lsof -i :"${1}" | awk '{if (NR!=1) {print $2}}'` 

一旦你所做的腳本運行(chmod U + X),您可以按以下執行:

./killMyPorts 5000 
+0

'killMyPorts.sh'?你的系統也有'lelf'嗎?見http://www.talisman.org/~erlkonig/documents/commandname-extensions-considered-harmful – 2013-02-19 21:25:34

+0

不,它不:-)我刪除了擴展名 – 2013-02-19 21:57:45

1

fuser能爲你做這項工作。

kill_port_users() { 
    for port; do 
    fuser -n tcp -k "$port" 
    done 
} 

kill_port_users 5000 5001 
+0

或者:echo 5000 5001 | xargs -n 1 fuser -n tcp -k – kofemann 2013-02-19 20:06:12

0

你試過

kill -9 `lsof -i :5000` 

kill -9 $(lsof -i :5000) 
+0

請不要宣傳不必要的使用SIGKILL - 這是一個好的方法可以讓SHM片段不被清理,臨時文件未被關閉,未被寫入的數據和日誌不被刷新等,只有在絕對必要時才應該使用。 – 2013-02-19 21:24:44

相關問題