0

我尝试模仿这个答案中提供的解决方案,它找到并杀死一个进程,并开发了以下脚本,该脚本 ssh 到输入参数中指定的机器列表并杀死所需的进程。

for node in "$@"; do
  ssh $node "kill $(ps aux | grep '[s]omeprocess' | awk '{print $2}')"
done

$2中使用的变量awk '{print $2}'应该是传递的第二个参数grep [s]omeprocess。但是,似乎使用了整个脚本的第二个输入参数(这部分我错了吗)。我能知道我如何awk '{print $2}'才能真正得到上一个grep操作传递的第二个参数吗?或者,有没有更好的方法来跨多台机器查找和终止进程?谢谢!

4

1 回答 1

2

$(ps ..)和将$2在客户端扩展,而不是服务器端。你应该逃避它们:

ssh $node "kill \$(ps aux | grep '[s]omeprocess' | awk '{print \$2}')"

但是不要通过 ps grepping,你应该只使用pkill, 就像在pkill someprocess.

于 2013-08-04T03:21:22.497 回答