【发布时间】:2016-06-27 07:56:16
【问题描述】:
我们有一个脚本可以获取所有活动进程并杀死它。 但由于某种原因,我收到以下错误:
:: 信息:: /AA/AAA/AAA/AAA/AAA/AAA/AAA/AAA\ Servers.sh :: 2016-06-26:04:00:04 :强制杀死剩余的服务器 过程
:: 信息:: /AA/AAA/AAA/AAA/AAA/AAA/AAA/AAA\ Servers.sh :: 2016-06-26:04:00:04 :force_stop_managed_servers 称为kill: 用法\ : kill [-s sigspec | -n 符号 | -sigspec] pid | jobspec ... 或 kill -l [sigspe\ c]
我的脚本具有以下强制终止进程的功能。
function force_stop_managed_servers () {
printf "\n\n:: INFO :: $0 :: `date +%Y-%m-%d:%H:%M:%S` :force_stop_managed_servers called"
cd $SCRIPT_DIR
kill -9 $(ps -ef | grep SONARPOTY | grep $USER | grep -v "grep" | grep -v "StopManagedServers" | grep -v "controller"| awk '{ print $2 }')
printf "\n\n:: INFO :: $0 :: `date +%Y-%m-%d:%H:%M:%S` :force_stop_managed_servers done"
}
请告诉我为什么会出现此错误。
【问题讨论】:
-
用
set -x试试,你可能会发现kill被错误地调用了。 (另外,shellcheck.net 会显示您还有其他一些潜在的错误。) -
确认
$USER是否不为空,并且big命令返回的pid是否只有一个。 -
@Fazlin:长命令不会返回单个进程 ID。它将返回多个进程。如果它返回多个进程,您能否建议它的缺点是什么以及克服该问题的可能解决方案?
-
我不想使用 for 循环,因为 for 循环会一一杀死进程,并且一旦我获取列表并一一杀死它们,进程可能会得到完成,然后 kill 命令将出错,告诉 No such process.
-
@Fazlin :它确实适用于多个 PID。正如我上面提到的,for 循环具有上述缺点。此外,这个问题是间歇性的。它并不总是来。有时我会看到这个问题,否则它可以正常工作。所以问题是我遇到这个问题的边缘情况。
标签: shell kill-process