3

我想通过 shell 脚本杀死进程,这给了我错误。这是我到目前为止所尝试的:

当我尝试杀死 memcache 时,它​​给了我类似“kill: No such process”之类的错误,我使用了以下命令:

ps -ef | grep "memcache" | awk '{print $2}' | xargs kill; 

或者如果尝试如下:

kill -9 $(pidof memcache)

我收到如下错误:“:参数必须是进程或作业 ID”

当我直接在命令提示符下运行时,进程正在运行:

ring@ubuntu:~/parasol$ ps aux | grep memcache     
memcache   873  0.0  0.0 323220  1188 ?        Sl   22:56   0:00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
ring      1714  0.0  0.0   9384   920 pts/0    S+   23:45   0:00 grep --color=auto memcache

我参考https://askubuntu.com/questions/239923/shell-script-to-9-kill-based-on-nameShell 脚本来捕获进程 ID 并在存在时将其杀死

我的 Ubuntu 版本:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.2 LTS"
NAME="Ubuntu"
VERSION="12.04.2 LTS, Precise Pangolin"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu precise (12.04.2 LTS)"
VERSION_ID="12.04"
4

5 回答 5

9

确实

ps -ef | grep memcache

会给两行..

所以你可以走这条路

ps -ef | grep memcache | grep -v "grep" | awk '{print $2}' | xargs kill; 

这可以为您提供准确的 PID

如果我必须这样做,我会在开始时将它分成两行

#!/bin/bash
PID=`ps -ef | grep memcache | grep -v "grep" | awk '{print $2}'`
echo $PID
#to check PID is right
kill -9 $PID

将其保存在脚本文件中,例如 test.sh

然后在终端上

chmod +x test.sh

然后

./test.sh
于 2013-10-31T07:21:51.430 回答
3

您可以使用以下命令: pkill memcachedpgrep memcached | xargs kill -9killall memcached

pgrep, pkill - 根据名称和其他属性查找或发送信号进程。

于 2013-10-31T07:04:57.577 回答
2

您的第一个命令可能会在有机会杀死目标进程之前杀死自己。

对于可靠的方式,运行pkill /usr/bin/memcachedpkill -9 /usr/bin/memcached尽管后者是一种不好的做法。

于 2013-10-31T07:22:03.887 回答
1

对于第一个命令,您会看到有两个进程与您的 grep 模式匹配。实际memcached过程和你的grep过程。这可能是第一个命令行错误的原因。

尝试缩小搜索范围,例如通过 grepping for eg "^memcache.*/usr/bin/memcached"


第二个错误的问题是您使用用户名而不是进程名进行调用pidof因此该命令基本上kill -9没有任何进程ID。尝试改为例如pidof memcached获取正确进程的进程 ID。

于 2013-10-31T06:51:00.697 回答
0
ps -ef | grep "memcache" | awk '{print $2}' | xargs kill; 
PID=`ps -ef | grep memcache | grep -v "grep" | awk '{print $2}'`
#...

首先,您可以在这种情况下使用cut而不是。awk无需使用坦克杀死苍蝇;)

那么,为什么要残忍的杀掉memcache呢?你有一个守护进程来阻止它:

/etc/init.d/memcached stop
service memcached stop
于 2013-10-31T11:25:57.047 回答