tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

killing subshells in /bin/sh scripts



I have the following script:

    # cat sub.sh
    echo "start script: $$"
    ( sleep 3 && echo "3s have elapsed" ) &
    pid=$!
    echo "$pid started in background"
    kill_job() {
	echo "killing $pid"
	kill "$pid"
    }
    trap "kill_job" 1 2 3 15
    wait
    echo "end script"

If I run this with NetBSD-7.1 /bin/sh, I get:

    # /bin/sh sub.sh
    start script: 11904
    29622 started in background
    3s have elapsed
    end script

If I interrupt this script with Ctrl-C within 3s, I get:

    # /bin/sh sub.sh
    start script: 17936
    28641 started in background
    ^Ckilling 28641
    end script
    # 3s have elapsed   <-- output after "sleep 3" finishes

Why does the output still appear after the script has ended?
If I run this with /bin/ksh, I don't get any output after the
end of the script.

-- 
Johnny C. Lam
jlam%NetBSD.org@localhost


Home | Main Index | Thread Index | Old Index