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