分页: 1 / 1

如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 19:27
pandaoknight
我有如下一个名为autoprint.sh的脚本

代码: 全选

while true
do
    sleep 2
    echo "Hello from autoprint.sh"
done
然后我以如下命令后台启动它

代码: 全选

autoprint.sh &
我想通过以下命令找到它,然后用kill杀掉。但却找不到。

代码: 全选

ps aux|grep autoprint.sh
请教如何在只知道脚本的名字的情况下,结束正在运行的后台Shell脚本。

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 19:33
pmshou
pgrep sh

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 19:33
pmshou
如果是用的bash,可以:pgrep bash

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 19:56
YeLee
ps -aux能找到的吧,你前面少了点东西嘛,我在这边测试都没有问题,不过,后台也可以fg过来的嘛。 :em04 :em04 :em04

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 19:59
枫叶饭团
ps aux |grep xxxx

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 21:02
pandaoknight
YeLee 写了:ps -aux能找到的吧,你前面少了点东西嘛,我在这边测试都没有问题,不过,后台也可以fg过来的嘛。 :em04 :em04 :em04
ps aux|grep autojoin.sh找不到正在运行它的bash饿。。。
pmshou 写了:如果是用的bash,可以:pgrep bash
综合大家的意见我还是用的

代码: 全选

grep aux|grep bash
得到下面结果:

代码: 全选

work@BD-MTC-PC-Router01:~$ ps aux|grep bash
work     20750  0.0  0.3  23648  7672 pts/2    Ss+  19:12   0:00 -bash
work     20915  0.0  0.2  27276  4392 pts/1    Ss+  19:23   0:00 bash
work     21426  0.0  0.1  27276  3332 pts/1    S    20:50   0:00 bash
work     21437  0.0  0.2  27208  4268 pts/4    Ss   20:51   0:00 bash
work     21569  0.0  0.1  27276  3332 pts/1    S    20:53   0:00 bash
work     21753  0.0  0.0  13576   924 pts/4    S+   20:56   0:00 grep --color=auto bash
问题是看不到bash运行的是哪个脚本。仅有启动时间可参考,脚本运行时间长了没人记得是什么时候启动的,也不知道该终止哪一个。

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 21:12
YeLee

代码: 全选

for i in $(ps aux|grep bash|awk '{print $2}');cat /proc/$i/cmdline && echo $i
:em06 :em06 :em06 馊主意,检查命令行的。

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 21:35
pandaoknight
YeLee 写了:

代码: 全选

for i in $(ps aux|grep bash|awk '{print $2}');cat /proc/$i/cmdline && echo $i
:em06 :em06 :em06 馊主意,检查命令行的。
试过了,不行。 :em06
出的以下结果。和ps aux|grep bash看到的东西差不多。

代码: 全选

work@BD-MTC-PC-Router01:~/PannadScript$ ./checkBash.sh 
-bash20750
bash20915
bash21426
bash21437
bash21569
bash24009
cat: /proc/24010/cmdline: No such file or directory
cat: /proc/24012/cmdline: No such file or directory
看来要获知bash运行的是哪个脚本挺难的。

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-07 21:39
YeLee
你看自己用哪个解释器嘛,Ubuntu的非互动shell不是用bash的,sh是链接到dash的吧。 :em04 :em04 :em04

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-08 8:08
aerofox

代码: 全选

ps aux|grep autoprint.sh
这个是能找到的,只不过多找出一个 grep 的进程。不要去找 bash 了。

找进程可以用 pgrep 或 skill,直接杀死的话,可以用 pkill、skill、killall
pgrep autoprint.sh
skill -n autoprint.sh

pkill autoprint.sh
skill autoprint.sh
killall autoprint.sh

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-09 11:57
ChenFengyuan
我用的是zsh,bash啥的应该也有这功能,需要内置kill
如果终端没有退出的话,运行jobs,
比如:

代码: 全选

% sleep 1d &
[1] 31742
[Login] cfy at cfy-notebook in /tmp/new
% jobs
[1]  + running    sleep 1d
[Login] cfy at cfy-notebook in /tmp/new
% kill %1
[Login] cfy at cfy-notebook in /tmp/new
% 
[1]  + terminated  sleep 1d
[Login] cfy at cfy-notebook in /tmp/new
% 

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-09 12:13
eexpress
pkill 就是。何必绕弯。

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-09 13:37
xjpvictor
用jobs行么?

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-09 14:25
wangzc2009
我一般是这样找的。

ps -ef | grep xxx

比如我一般关闭pidgin是这么找的

ps -ef |grep pid

找到后kill

Re: 如何找出一个后台运行的Shell脚本的进程并终止它

发表于 : 2012-07-09 15:33
link_01
ps -e -o pid,comm