1

在我的 Makefile 中,我有以下内容可以杀死所有正在运行的 nginx 进程:

killNginx:
  sudo kill -9 $(ps -ef | grep [n]ginx | awk '{print $2}')

问题是当没有运行 nginx 进程时它给我一个错误。有没有办法只有在 nginx 正在运行时才能运行 kill 命令?

编辑:

实际上,我认为问题在于 2 美元没有被执行。我尝试了 $$2 但仍然无法正常工作。任何人有任何其他想法来逃避 2 美元吗?

4

3 回答 3

2

找到了一种使它对我有用的方法:

killNginx:
  ps -ef | grep [n]ginx | awk '{print $$2}' | xargs sudo kill -9
于 2012-04-20T17:48:05.510 回答
1

您需要转义$配方中不引入 make 变量的每一个。所以,你需要同时逃避$$(ps ... print $$2。您似乎在暗示这不是您的问题:但是,如果没有它,这甚至不可能接近工作。

你也可以看看killall。类似的东西killall -I nginx || true可能会做到。

于 2012-04-20T12:02:04.540 回答
0

试一试:

for PID in $(ps -ef | grep [n]ginx | awk '{ print $2 }'); do
    sudo kill -9 $PID
done
于 2012-04-20T06:10:12.863 回答