跳轉至內容

WebObjects/Web 應用程式/部署/終止 WOA 程序

來自華夏公益教科書,開放的書籍,為開放的世界

這是最令人頭疼的問題之一。如何終止一個失控的 WO 應用程式?ps 命令不會給你任何資訊,因為它將程序列為 java。

嘗試使用 lsof。您需要以管理員許可權執行它,因此命令為

sudo lsof -i tcp:xxxx 

或者,您可以使用指令碼

 #!/bin/sh
 #
 #  portslay:  kill the task listening on the specified TCP port
 #
 kill -9 `lsof -i tcp:$1 | grep LISTEN | awk '{ print $2;}'`

您還需要對指令碼進行 sudo 才能執行。

對於那些遇到 CLOSE_WAIT 問題的人,請嘗試以下方法

sudo lsof -i tcp:xxxx 

或者,您可以使用指令碼

 #!/bin/sh
 #
 #  portslay:  kill the task listening on the specified TCP port
 #
 kill -9 `lsof -i tcp:$1 | grep CLOSE_WAIT | awk '{ print $2;}'`

透過執行以下操作來執行它

 sudo ./portslay xxxx-yyyy

其中 xxxx 是第一個埠,yyyy 是最後一個埠


如何在(最好是在指令碼中)

ps aux | grep java | grep <appName> | grep -v grep | awk '{ print"kill -9 "$2 }' | sh

Mike Schrag

[編輯 | 編輯原始碼]

我只使用

 ps auxww

這將顯示完整的命令列。您可以從這個檢視中看到應用程式名稱。

Fabian Peters

[編輯 | 編輯原始碼]

在 FreeBSD 上,需要設定

 kern.ps_arg_cache_limit=1024

在 /etc/sysctl 中以顯示使用 ps -auxww 的完整命令列。要立即設定它

 sysctl kern.ps_arg_cache_limit=1024

或者,可以使用 Johan 以下的指令碼。

Johan Henselmans

[編輯 | 編輯原始碼]

我編寫了一個小型指令碼,它使用 lsof 透過檢視開啟的某些特定檔案來查詢程序,然後可以使用返回的程序來終止程序

#!/bin/sh

if [ $# = 0 ]; then
        echo ""
        echo "   usage: $0 javaname(s)"
        echo "   The current processes that  containt javaname will be displayed"
        echo "   eg: $0 JavaMonitor.woa"
        echo ""
        exit 1
fi

OS=`uname -s`
# echo $OS
case  ${OS} in
'FreeBSD')
LSOF=/usr/local/sbin/lsof
;;
'Linux')
LSOF=/usr/sbin/lsof
;;
'Darwin')
LSOF=/usr/sbin/lsof
;;
*)
echo "no lsof command available on this OS!";
exit 1
;;
esac

for i in $*
do
${LSOF} -c java | grep -i $i | awk '{print $2}' | sort -u;
done
華夏公益教科書