sh/bash/dash/ksh/zsh等Shell脚本
-
pandaoknight
- 帖子: 5
- 注册时间: 2012-07-07 16:05
#1
帖子
由 pandaoknight » 2012-07-07 19:27
我有如下一个名为autoprint.sh的脚本
代码: 全选
while true
do
sleep 2
echo "Hello from autoprint.sh"
done
然后我以如下命令后台启动它
我想通过以下命令找到它,然后用kill杀掉。但却找不到。
代码: 全选
ps aux|grep autoprint.sh
请教如何在只知道脚本的名字的情况下,结束正在运行的后台Shell脚本。
-
pmshou
- 帖子: 315
- 注册时间: 2012-05-05 20:21
#2
帖子
由 pmshou » 2012-07-07 19:33
pgrep sh
看我注册日期:从此告别WINDOWS!
-
pmshou
- 帖子: 315
- 注册时间: 2012-05-05 20:21
#3
帖子
由 pmshou » 2012-07-07 19:33
如果是用的bash,可以:pgrep bash
看我注册日期:从此告别WINDOWS!
-
YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
-
联系:
#4
帖子
由 YeLee » 2012-07-07 19:56
-
枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
-
联系:
#5
帖子
由 枫叶饭团 » 2012-07-07 19:59
ps aux |grep xxxx
-
pandaoknight
- 帖子: 5
- 注册时间: 2012-07-07 16:05
#6
帖子
由 pandaoknight » 2012-07-07 21:02
ps aux|grep autojoin.sh找不到正在运行它的bash饿。。。
pmshou 写了:如果是用的bash,可以:pgrep 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
- 来自: 东海硇州,一双管钥。
-
联系:
#7
帖子
由 YeLee » 2012-07-07 21:12
代码: 全选
for i in $(ps aux|grep bash|awk '{print $2}');cat /proc/$i/cmdline && echo $i

馊主意,检查命令行的。
-
pandaoknight
- 帖子: 5
- 注册时间: 2012-07-07 16:05
#8
帖子
由 pandaoknight » 2012-07-07 21:35
YeLee 写了:代码: 全选
for i in $(ps aux|grep bash|awk '{print $2}');cat /proc/$i/cmdline && echo $i

馊主意,检查命令行的。
试过了,不行。
出的以下结果。和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
- 来自: 东海硇州,一双管钥。
-
联系:
#9
帖子
由 YeLee » 2012-07-07 21:39
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#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
#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
- 来自: 长沙
#12
帖子
由 eexpress » 2012-07-09 12:13
pkill 就是。何必绕弯。
● 鸣学
-
xjpvictor
- 帖子: 2837
- 注册时间: 2007-08-22 15:55
- 系统: Archlinux
- 来自: 新加坡
-
联系:
#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
- 来自: 湖北十堰
#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
#15
帖子
由 link_01 » 2012-07-09 15:33
ps -e -o pid,comm
笔记
-------------------------------------
http://blog.163.com/wqt_1101