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

Sur*_*shi 2 bash shell ubuntu

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

当我试图杀死MEMCACHE它给我的错误,如"杀:没有这样的过程",我用下面的命令:

ps -ef | grep "memcache" | awk '{print $2}' | xargs kill; 
Run Code Online (Sandbox Code Playgroud)

或者如果尝试如下:

kill -9 $(pidof memcache)
Run Code Online (Sandbox Code Playgroud)

我得到如下错误:":参数必须是进程或作业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
Run Code Online (Sandbox Code Playgroud)

我REFF到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"
Run Code Online (Sandbox Code Playgroud)

Ash*_*ish 8

实际上可以

ps -ef | grep memcache
Run Code Online (Sandbox Code Playgroud)

会给两行..

所以你可以走这条路

ps -ef | grep memcache | grep -v "grep" | awk '{print $2}' | xargs kill; 
Run Code Online (Sandbox Code Playgroud)

这可以为您提供一个PID

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

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

将它保存在脚本文件中说test.sh

然后在终端上

chmod +x test.sh
Run Code Online (Sandbox Code Playgroud)

然后

./test.sh
Run Code Online (Sandbox Code Playgroud)

  • Gaa,[无用的`grep`](http://partmaps.org/era/unix/award.html#grep)嘉豪!你的意思是`ps -ef | awk'/ [m] emcache/{print $ 2}'`. (3认同)
  • 无用的`ps`,`grep`和`awk`嘉豪!这可以用`pkill -f -9 memcache`代替 (2认同)