LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 854|回复: 0

[求助]用户中断和超时中断问题

[复制链接]
发表于 2007-10-7 11:59:03 | 显示全部楼层 |阅读模式
相同的程序,在debian下执行没问题
$./qu-19-02.sh "sleep 20"  然后我在时间到之前ctrl+c中断
29490
29491
29493
29493
Got SIGINT, user interrupt.
Sub-processes killed.  
但在ubuntu下在下一个提示符$后出现 kill: 45: No such process

下面的超时中断两个系统都没问题的
$./qu-19-02.sh "sleep 20"
29498
29499
29501
29501
Got SIGALARM, cmd took too long.
Sub-processes killed.


-------以下是shell脚本代码qu-19-02.sh------------------
#! /bin/sh

AlarmHandler() {
    echo "Got SIGALARM, cmd took too long."
    KillSubProcs
    exit 14
}

IntHandler() {
    echo "Got SIGINT, user interrupt."
    KillSubProcs
    exit 2
}

KillSubProcs() {
    kill ${CHPROCIDS:-$!}
    if [ $? -eq 0 ] ; then echo "Sub-processes killed." ; fi
}

SetTimer() {
    DEF_TOUT=${1:-10};
    if [ $DEF_TOUT -ne 0 ] ; then
       #( sleep $DEF_TOUT && kill -s 14 $$) &
       sleep $DEF_TOUT && kill -s 14 $$&  #设为子进程1 .两个命令都在后台运行还是只是最后一个??
        echo $!
     #   CHPROCIDS="$CHPROCIDS $!"
        TIMERPROC=$!
    fi
}

UnsetTimer() {
    kill $TIMERPROC
}

# main()

trap AlarmHandler 14
trap IntHandler 2
echo $$
SetTimer 15
PROG=$1
$PROG &  #设为子进程2
echo $!
CHPROCIDS="$CHPROCIDS $!"
echo $CHPROCIDS
wait $!
UnsetTimer
echo "All Done."
exit 0

对于超时中断是先kill 子进程2  ,子进程1 kill 父进程, 子进程自己结束
对于用户中断,执行顺序是怎样的?是父进程杀死进程1和2么????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表