|
相同的程序,在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么???? |
|