我想通过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-name 和 Shell 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"
答案 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/memcached
或pkill -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