【问题标题】:Stop WebSphere JVM within time limit?在时限内停止 WebSphere JVM?
【发布时间】:2016-10-01 14:39:41
【问题描述】:

我想知道我们是否可以在特定时间限制内停止单个 JVM。如果它没有在该时间限制内停止,则从 shell 脚本中终止该进程。

如果我们正在执行 ./stopServer.sh JVM_Name - 它将一直运行到 jvm 不会停止或出现任何错误并退出。

我要做的是:./stopServer.sh JVM_Name - 如果这没有在 2 分钟内停止(假设),则终止进程(但是如何通过 shell 脚本确定它没有在 2 分钟内停止在进程去杀之前)。我可以写出杀死的条件。但不确定如何检查 JVM 是否在 2 分钟内停止,以便我们可以继续杀死进程。

谁能建议shell脚本代码来识别jvm是否在特定时间限制内停止?

【问题讨论】:

  • @Sampada 这似乎是一个 Windows 问题,在这里说 aix...
  • 哦,是的。你是对的@Stefan。我相信对于 aix too strong 可以找到类似的东西。
  • 我想我解释它比搜索重复的更快......但如果你发现一些随意添加它

标签: shell websphere ksh aix websphere-7


【解决方案1】:

JVM 是一个进程,因此可以使用 kill 命令停止 - kill $processid 或更残酷的 kill -9 $processid

如果您使用类似 java ... 的脚本从脚本启动 JVM,那么我建议在该行的末尾和下一行中放置一个 &

processid=$!

保存后台进程的id。 那么

sleep 120

将等待 2 分钟。 现在你有两个选择——要么干掉

kill $processid /dev/null 2>&1

或首先检查 processid 是否(非常不可能)被另一个进程重用(或使用其他方式检查您的 JVM 是否已完成,可能是从您的 java 程序中指示这一点的文件),然后是否匹配使用杀戮。

ps -ef|grep -w $processid |grep -w java > /dev/null

如果返回码为零,则继续杀死

test $? -eq 0 && kill $processid

我通常会相信 processid 是我的 JVM 或者根本没有使用

【讨论】:

  • 不错的建议。我将在接下来的 1 小时内到达办公室。肯定会做检查。
  • 我试过你的建议。我有一个疑问。美元!正在执行命令后捕获 pid。假设从后台捕获的 pid 不可用并且新进程(孤儿)离开了。如何应对这种情况。这样好吗 ./stopServer.sh JVM & > /somelocation ;睡眠 120; PID=ps -ef | grep $JVM| grep -v grep | awk '{print$2}';如果 [[ "" != "$PID" ]] 然后 kill -9 $PID fi
  • 嗯,从您的 websphere 标签中,我几乎预料到您开始的事情可能不是您想要杀死的实际进程。所以你的 stopServer.sh 会生成一个 java 并且不会在 2 分钟后终止?也许它在停止时有工作要做?你检查过 IBM 文档吗?
  • 还没有。我可以在while循环中写它,但需要检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多