我们有一个脚本可以获取所有活动进程并将其杀死。 但由于某种原因,我得到以下错误:
:: INFO :: / AA / AAA / AAA / AAA / AAA / AAA / AAA / AAA \ Servers.sh :: 2016-06-26:04:00:04:强制杀死剩余服务器 PROCESSES
:: INFO :: / AA / AAA / AAA / AAA / AAA / AAA / AAA / AAA \ Servers.sh :: 2016-06-26:04:00:04:force_stop_managed_servers 叫做 kill:usage \:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...或kill -l [sigspe \ c]
我的脚本具有以下功能来强制终止进程。
AsyncTask
请告诉我为什么会收到此错误。
答案 0 :(得分:0)
如果在没有参数的情况下调用'kill -9'命令,则可能出现此错误。您可以执行长行命令并将输出分配给变量。稍后检查该变量是否为空,并将该变量作为参数传递给kill命令。
答案 1 :(得分:0)
procps
软件包在处理流程选择和向util-linux-ng
软件包与grep
组合的选定流程中发送信号方面具有更强的功能。
通常会看到使用grep
从脚本列表中选择进程ID的脚本。
ps -ef | grep pattern | grep -v grep | awk '{print $2}'
但是,这可以缩短为:
pgrep pattern
这两种情况都会打印名称为PID
的进程的pattern
。
但有一点需要注意,第二个版本只匹配进程名称的模式。
如果需要匹配命令参数,则需要以下内容:
pgrep -f pattern
限制搜索用户拥有的进程。有些尝试使用grep
用户名。 pgrep
和ps
都接受-u username
仅列出用户名所拥有的进程。
而不是写作:
ps -ef | grep username | grep -v grep | awk '{print $2}'
尝试:
pgrep -u username
如果您需要终止这些选定的PID
,则无法针对结果运行kill
。您只需使用pkill
代替pgrep
。
pkill -u username pattern
如果您真的受限于使用ps
和kill
出于任何原因,ps
允许格式化输出。通过这种方式,您可以grep
获取模式,而不会无意中获得PID
本身的grep
。
kill -9 $(ps -u username -opid=.comm= | grep pattern | awk '{print $1}')
使用kill $()
的唯一缺点是$()
可能会返回空,您将收到错误消息。解决方案是将错误消息抛给/dev/null
。即使没有什么可以杀人的,pkill
也不会抱怨。
最后,如果需要匹配命令参数而不是命令本身,请使用-opid=,args=
输出参数而不是输出命令。