我想杀死所有我通过的进程:

ps aux | grep my_pattern

怎么做?

这不起作用:

pkill my_pattern

当前回答

我接受了Eugen Rieck的答案并进行了处理。我的代码添加了以下内容:

ps-ax包含grep,所以我用grep-Eiv“grep”排除了它添加了一些“如果”和“回声”,使其具有可读性。

我创建了一个名为killseerver的文件,如下所示:

#!/bin/bash
PROCESS_TO_KILL=bin/node
PROCESS_LIST=`ps ax | grep -Ei ${PROCESS_TO_KILL} | grep -Eiv 'grep' | awk ' { print $1;}'`
KILLED=
for KILLPID in $PROCESS_LIST; do
  if [ ! -z $KILLPID ];then
    kill -9 $KILLPID
    echo "Killed PID ${KILLPID}"
    KILLED=yes
  fi
done

if [ -z $KILLED ];then
    echo "Didn't kill anything"
fi

后果

➜  myapp git:(master) bash killserver
Killed PID 3358
Killed PID 3382
Killed
➜  myapp git:(master) bash killserver
Didn't kill anything

其他回答

这是一种方式:

kill -9 $(pgrep -d' ' -f chrome)

pgrep搜索与chrome相关的所有进程,并在一个用空格分隔的列表中返回它们。

这将传递给kill应用程序,该应用程序可以安全地终止所有相关的chrome进程。

这仍然很危险,小心。

找到了对不支持pkill的服务器执行此操作的最佳方法

kill -9 $(ps ax | grep My_pattern| fgrep -v grep | awk '{ print $1 }')

你不必循环。

使用pkill-f,它匹配命令行任何部分的模式

pkill -f my_pattern

万一它不起作用,也尝试使用这个:

pkill -9 -f my_pattern

如果您在选择流程时需要更多的灵活性,请使用

for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do 
  kill -9 $KILLPID;
done

您可以使用grep-e等。

我接受了Eugen Rieck的答案并进行了处理。我的代码添加了以下内容:

ps-ax包含grep,所以我用grep-Eiv“grep”排除了它添加了一些“如果”和“回声”,使其具有可读性。

我创建了一个名为killseerver的文件,如下所示:

#!/bin/bash
PROCESS_TO_KILL=bin/node
PROCESS_LIST=`ps ax | grep -Ei ${PROCESS_TO_KILL} | grep -Eiv 'grep' | awk ' { print $1;}'`
KILLED=
for KILLPID in $PROCESS_LIST; do
  if [ ! -z $KILLPID ];then
    kill -9 $KILLPID
    echo "Killed PID ${KILLPID}"
    KILLED=yes
  fi
done

if [ -z $KILLED ];then
    echo "Didn't kill anything"
fi

后果

➜  myapp git:(master) bash killserver
Killed PID 3358
Killed PID 3382
Killed
➜  myapp git:(master) bash killserver
Didn't kill anything