杀死命令错误

时间:2016-06-27 07:56:16

标签: shell kill-process

我们有一个脚本可以获取所有活动进程并将其杀死。 但由于某种原因,我得到以下错误:

  

:: 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

请告诉我为什么会收到此错误。

2 个答案:

答案 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用户名。 pgrepps都接受-u username仅列出用户名所拥有的进程。

而不是写作:

ps -ef | grep username | grep -v grep | awk '{print $2}'

尝试:

pgrep -u username

如果您需要终止这些选定的PID,则无法针对结果运行kill。您只需使用pkill代替pgrep

pkill -u username pattern

如果您真的受限于使用pskill出于任何原因,ps允许格式化输出。通过这种方式,您可以grep获取模式,而不会无意中获得PID本身的grep

kill -9 $(ps -u username -opid=.comm= | grep pattern | awk '{print $1}')

使用kill $()的唯一缺点是$()可能会返回空,您将收到错误消息。解决方案是将错误消息抛给/dev/null。即使没有什么可以杀人的,pkill也不会抱怨。

最后,如果需要匹配命令参数而不是命令本身,请使用-opid=,args=输出参数而不是输出命令。