当前位置: 技术问答>linux和unix
请教一个简单的shell:关于kill的问题
来源: 互联网 发布时间:2016-06-28
本文导语: 我写了一个简单的shell脚本如下,想用于重启memcached #!/bin/sh for i in `ps -ef|grep 'memcached'|grep -v 'grep'|awk '{print $2}'`; do echo $i; kill -9 $i; done echo "come1" memcached -u mysql & echo "come2" 但发现脚本不会运行到: ech...
我写了一个简单的shell脚本如下,想用于重启memcached
但发现脚本不会运行到: echo "come1" 这里,因此memcached也没有重启,请高手指点是为什么?
#!/bin/sh
for i in `ps -ef|grep 'memcached'|grep -v 'grep'|awk '{print $2}'`;
do echo $i;
kill -9 $i;
done
echo "come1"
memcached -u mysql &
echo "come2"
但发现脚本不会运行到: echo "come1" 这里,因此memcached也没有重启,请高手指点是为什么?
|
killall memcached
or
pgrep memcached | xargs kill -9
or
pgrep memcached | xargs kill -9
|
想要验证是不是把自己给Kill了, 很简单的方法
按照一楼的方法, 改一下, 同时在Code开始加上
看看自个儿的进程号在不在里面
按照一楼的方法, 改一下, 同时在Code开始加上
echo $$
看看自个儿的进程号在不在里面
|
解决方法是在一开始把自己的进程ID保存到变量
myid=$$
然后在杀进程的时候 做个判断 当进程ID不等于myid的时候 再杀
myid=$$
然后在杀进程的时候 做个判断 当进程ID不等于myid的时候 再杀
|
你把 `ps -ef|grep 'memcached'|grep -v 'grep'|awk '{print $2}'`用变量接收一下试试:
(没有环境,调不了)
(没有环境,调不了)
#!/bin/sh
res=`ps -ef|grep 'memcached'|grep -v 'grep'|awk '{print $2}'`
echo $res
for i in $res;
do echo $i;
kill -9 $i;
done
echo "come1"
memcached -u mysql &
echo "come2"
|
为何不用 killall memcached ?
|
在一个脚本中执行下面的语句 包括这条语句本身的进程也会显示出来
不信你可以试试随便查看一个不存在的进程 也会有输出(就是你查找进程的本身)
ps -ef|grep 'memcached'|grep -v 'grep'|awk '{print $2}
所以你杀的时候 把自己也给杀了 当然就显示不到后面了
不信你可以试试随便查看一个不存在的进程 也会有输出(就是你查找进程的本身)
ps -ef|grep 'memcached'|grep -v 'grep'|awk '{print $2}
所以你杀的时候 把自己也给杀了 当然就显示不到后面了
|
很明显,杀进程的时候,将自己杀死了!
|
杀进程的时候,将自己杀死了!