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
我只使用
ps auxww
這將顯示完整的命令列。您可以從這個檢視中看到應用程式名稱。
在 FreeBSD 上,需要設定
kern.ps_arg_cache_limit=1024
在 /etc/sysctl 中以顯示使用 ps -auxww 的完整命令列。要立即設定它
sysctl kern.ps_arg_cache_limit=1024
或者,可以使用 Johan 以下的指令碼。
我編寫了一個小型指令碼,它使用 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