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

yxyvkwin  于 2023-11-17  发布在  Shell
关注(0)|答案(6)|浏览(161)

我想通过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-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"

juud5qan

juud5qan1#

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

2sbarzqh

2sbarzqh2#

您可以使用以下命令:pkill memcachedpgrep memcached | xargs kill -9killall memcached
pgrep,pkill -基于名称和其他属性查找或通知进程。

hmtdttj4

hmtdttj43#

你的第一个命令可能在有机会杀死目标进程之前就杀死了自己。
要获得可靠的方法,请运行pkill /usr/bin/memcachedpkill -9 /usr/bin/memcached,尽管后者是一种不好的做法。

iih3973s

iih3973s4#

对于第一个命令,你看到有 * 两个 * 进程与你grep的模式相匹配。实际的memcached进程和你的grep进程。这可能是第一个命令行出错的原因。
尝试缩小搜索范围,例如通过grepping搜索"^memcache.*/usr/bin/memcached"
第二个错误的问题是,你用 username 而不是进程名来调用pidof,所以命令本质上是没有任何进程id的kill -9。尝试例如pidof memcached来获取正确进程的进程id。

zlhcx6iw

zlhcx6iw5#

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

4urapxun

4urapxun6#

如果应用程序确实有端口正在运行,则可以使用此

lsof -t -i :port# | xargs kill -9

字符串

相关问题