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

sh/bash/dash/ksh/zsh等Shell脚本
回复
pandaoknight
帖子: 5
注册时间: 2012-07-07 16:05

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

#1

帖子 pandaoknight » 2012-07-07 19:27

我有如下一个名为autoprint.sh的脚本

代码: 全选

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

代码: 全选

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

代码: 全选

ps aux|grep autoprint.sh
请教如何在只知道脚本的名字的情况下,结束正在运行的后台Shell脚本。
pmshou
帖子: 315
注册时间: 2012-05-05 20:21

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

#2

帖子 pmshou » 2012-07-07 19:33

pgrep sh
看我注册日期:从此告别WINDOWS!
pmshou
帖子: 315
注册时间: 2012-05-05 20:21

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

#3

帖子 pmshou » 2012-07-07 19:33

如果是用的bash,可以:pgrep bash
看我注册日期:从此告别WINDOWS!
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

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

#4

帖子 YeLee » 2012-07-07 19:56

ps -aux能找到的吧,你前面少了点东西嘛,我在这边测试都没有问题,不过,后台也可以fg过来的嘛。 :em04 :em04 :em04
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

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

#5

帖子 枫叶饭团 » 2012-07-07 19:59

ps aux |grep xxxx
pandaoknight
帖子: 5
注册时间: 2012-07-07 16:05

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

#6

帖子 pandaoknight » 2012-07-07 21:02

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运行的是哪个脚本。仅有启动时间可参考,脚本运行时间长了没人记得是什么时候启动的,也不知道该终止哪一个。
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

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

#7

帖子 YeLee » 2012-07-07 21:12

代码: 全选

for i in $(ps aux|grep bash|awk '{print $2}');cat /proc/$i/cmdline && echo $i
:em06 :em06 :em06 馊主意,检查命令行的。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
pandaoknight
帖子: 5
注册时间: 2012-07-07 16:05

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

#8

帖子 pandaoknight » 2012-07-07 21:35

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运行的是哪个脚本挺难的。
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

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

#9

帖子 YeLee » 2012-07-07 21:39

你看自己用哪个解释器嘛,Ubuntu的非互动shell不是用bash的,sh是链接到dash的吧。 :em04 :em04 :em04
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#10

帖子 aerofox » 2012-07-08 8:08

代码: 全选

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
头像
ChenFengyuan
帖子: 770
注册时间: 2008-03-23 0:39

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

#11

帖子 ChenFengyuan » 2012-07-09 11:57

我用的是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
% 
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#12

帖子 eexpress » 2012-07-09 12:13

pkill 就是。何必绕弯。
● 鸣学
头像
xjpvictor
帖子: 2837
注册时间: 2007-08-22 15:55
系统: Archlinux
来自: 新加坡
联系:

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

#13

帖子 xjpvictor » 2012-07-09 13:37

用jobs行么?
Entschuldigung. Ich habe keine ahnung.
Secure with PGP: gpg --recv-keys 0x68b6e3d8
Fingerprint: 5556 517C F52F E402 DDF5 5400 6D30 F13E 68B6 E3D8
Towards A Sustainable Earth: Print Only When Necessary
wangzc2009
帖子: 319
注册时间: 2009-01-30 18:18
来自: 湖北十堰

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

#14

帖子 wangzc2009 » 2012-07-09 14:25

我一般是这样找的。

ps -ef | grep xxx

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

ps -ef |grep pid

找到后kill
愿意同大家一起学习分享linux知识
头像
link_01
帖子: 1024
注册时间: 2008-11-05 13:24

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

#15

帖子 link_01 » 2012-07-09 15:33

ps -e -o pid,comm
笔记
-------------------------------------
http://blog.163.com/wqt_1101
回复