免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1914 | 回复: 7
打印 上一主题 下一主题

请教shell问题:为什么脚本运行时会将当前启动的shell进程打出来 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-29 18:14 |只看该作者 |倒序浏览
脚本想实现的功能是杀掉$1参数代表的进程,我现在输入一个不存在的进程abc,ps -ef|grep abc确认无该进程,但是脚本执行时却将当前shell打印出来了
sbmp:/tmp/ou # ./pskill.sh abc
5232 /bin/sh
Are these processes to be killed?[y..n]n
sbmp:/tmp/ou #
sbmp:/tmp/ou # ls hold1*
hold1.5232
sbmp:/tmp/ou #
sbmp:/tmp/ou # cat hold1.5232
5232    /bin/sh
sbmp:/tmp/ou #
sbmp:/tmp/ou #
sbmp:/tmp/ou # ps -ef|grep abc|grep -v "grep"|awk '{print $2"\t"$8}'
//没有结果输出

具体内容如下:
#!/bin/sh
HOLD1=/tmp/ou/hold1.$$
PROCESS=$1

usage()
{
        echo "Usage: `basename $0` processname"
        exit 1
}

if [ $# -ne 1 ]
then
        usage
fi

case $1 in
        *)
        ps -ef|grep $PROCESS|grep -v "grep"|awk '{print $2"\t"$8}' >$HOLD1
        ;;
esac

if [ ! -s $HOLD1 ]
then
        echo "No process found"
        exit 1
fi

while read LOOP1 LOOP2
do
        echo $LOOP1 $LOOP2
done <$HOLD1

echo -n "Are these processes to be killed?[y..n]"
read ANS

case $ANS in
        y|Y)
               while read LOOP1 LOOP2
        do
                echo $LOOP1
                kill -9 $LOOP1
        done <$HOLD1
        rm /tmp/*.$$
        ;;
        n|N)
        ;;
esac

论坛徽章:
0
2 [报告]
发表于 2010-01-29 18:32 |只看该作者
echo -n "Are these processes to be killed?[y..n]"


你看一下这句的位置是否正确?

不管如何这句echo都始终显示的

论坛徽章:
0
3 [报告]
发表于 2010-01-29 18:38 |只看该作者
但是从执行结果看的确将当前shell的进程号写进去了,这个怎么解决?
sbmp:/tmp/ou # ./pskill.sh abc
5232 /bin/sh


sbmp:/tmp/ou # cat hold1.5232
5232    /bin/sh


至于你说的echo位置不对问题,前面有个检查,如果文件为空则退出脚本了
if [ ! -s $HOLD1 ]
then
        echo "No process found"
        exit 1
fi

论坛徽章:
0
4 [报告]
发表于 2010-01-29 18:39 |只看该作者
#!/bin/sh
HOLD1=/tmp/ou/hold1.$$
PROCESS=$1

usage()
{
        echo "Usage: `basename $0` processname"
        exit 1
}

if [ $# -ne 1 ]
then
        usage
fi

case $1 in
        *)
        ps -ef|grep $PROCESS|grep -v "grep"|awk '{print $2"\t"$8}' >$HOLD1
        ;;
esac

if [ ! -s $HOLD1 ]
then
        echo "No process found"
        exit 1
else#改

while read LOOP1 LOOP2
do
        echo $LOOP1 $LOOP2
done <$HOLD1

echo -n "Are these processes to be killed?[y..n]"
read ANS

case $ANS in
        y|Y)
               while read LOOP1 LOOP2
        do
                echo $LOOP1
                kill -9 $LOOP1
        done <$HOLD1
        rm /tmp/*.$$
        ;;
        n|N)
        ;;
esac

fi#改




判断是否存在进程不存在显示No process found  else 就显示是否kill

[ 本帖最后由 CU_Solaris 于 2010-1-29 18:40 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2010-01-29 18:54 |只看该作者

回复 #4 CU_Solaris 的帖子

改了,结果一样,主要是$HOLD1文件中有一行当前shell的进程号,所以无论如何都判断有进程存在

sbmp:/tmp/ou # ./pskill.sh abc
5430 /bin/sh
Are these processes to be killed?[y..n]n
sbmp:/tmp/ou #
sbmp:/tmp/ou # ls hold*
hold1.5430
sbmp:/tmp/ou # cat hold1.5430
5430    /bin/sh

论坛徽章:
0
6 [报告]
发表于 2010-01-30 08:51 |只看该作者
继续求助

论坛徽章:
0
7 [报告]
发表于 2010-01-30 08:54 |只看该作者
输入一个有的进程临时文件中还是会打印当前shell,见如下最后一行
sbmp:/tmp/ou # ./pskill.sh ora_
20695 ora_pmon_ora11g
20697 ora_vktm_ora11g
20701 ora_diag_ora11g
20703 ora_dbrm_ora11g
20705 ora_psp0_ora11g
……………………………………
……………………………………
20727 ora_s000_ora11g
7729 ora_fbda_ora11g
7734 ora_qmnc_ora11g
7748 ora_q000_ora11g
7750 ora_q001_ora11g
7825 ora_smco_ora11g
8376 ora_w000_ora11g
8550 /bin/sh

论坛徽章:
0
8 [报告]
发表于 2010-01-30 09:39 |只看该作者
这种现象不是很正常么?

试验:

$ cat test.sh
#!/bin/sh
ps -ef|grep $1|grep -v grep

$ ./test.sh dummy   
    hper 16449 16431   0 09:34:32 pts/44      0:00 /bin/sh ./test.sh dummy
$
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP