我想通过shell脚本杀死进程,它给了我错误。这是我到目前为止尝试过的:
当我试图杀死memcache它给予我错误像“杀死:没有这样的进程”,我使用下面的命令:
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"
型
6条答案
按热度按时间juud5qan1#
Acutally
字符串
会给给予两行。
你可以走这边
型
这可以让你得到一个PID
如果我必须这样做,我会在开始时将其分为两行
型
保存到脚本文件中,比如test.sh
然后在终端上
型
然后
型
2sbarzqh2#
您可以使用以下命令:
pkill memcached
或pgrep memcached | xargs kill -9
或killall memcached
。pgrep,pkill -基于名称和其他属性查找或通知进程。
hmtdttj43#
你的第一个命令可能在有机会杀死目标进程之前就杀死了自己。
要获得可靠的方法,请运行
pkill /usr/bin/memcached
或pkill -9 /usr/bin/memcached
,尽管后者是一种不好的做法。iih3973s4#
对于第一个命令,你看到有 * 两个 * 进程与你grep的模式相匹配。实际的
memcached
进程和你的grep
进程。这可能是第一个命令行出错的原因。尝试缩小搜索范围,例如通过grepping搜索
"^memcache.*/usr/bin/memcached"
。第二个错误的问题是,你用 username 而不是进程名来调用
pidof
,所以命令本质上是没有任何进程id的kill -9
。尝试例如pidof memcached
来获取正确进程的进程id。zlhcx6iw5#
字符串
首先,在这种情况下,你可以使用
cut
而不是awk
。不需要使用坦克杀死苍蝇;)那么,为什么要残忍地杀死memcache呢?你有一个守护进程来阻止它:
型
4urapxun6#
如果应用程序确实有端口正在运行,则可以使用此
字符串