试图通过shell脚本来杀死进程

时间:2013-10-31 06:46:47

标签: bash shell ubuntu

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

当我试图杀死内存缓存时,它会给我一个错误,比如“杀死:没有这样的进程”,我用下面的命令:

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 script to capture Process ID and kill it if exist

我的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"

5 个答案:

答案 0 :(得分:8)

Acutally

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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


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

答案 4 :(得分: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