From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25014 invoked by alias); 4 Apr 2015 20:45:49 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 20089 Received: (qmail 7185 invoked from network); 4 Apr 2015 20:45:47 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_PASS autolearn=ham version=3.3.2 X-Injected-Via-Gmane: http://gmane.org/ To: zsh-users@zsh.org From: Thorsten Kampe Subject: Re: How to trap EXIT like in bash Date: Sat, 4 Apr 2015 22:45:30 +0200 Message-ID: References: <1428167314.5875.2.camel@niobium.home.fifi.org> <150404114859.ZM14898@torch.brasslantern.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: p5de5aada.dip0.t-ipconnect.de User-Agent: MicroPlanet-Gravity/3.0.4 * Bart Schaefer (Sat, 4 Apr 2015 11:48:59 -0700) > > On Apr 4, 7:43pm, Thorsten Kampe wrote: > } > } elif [[ $shell = zsh ]] > } then > } trap "echo trapped; exit" INT HUP TERM > } fi > } > } Then Zsh does actually ignore the kill (TERM) signal. > > It doesn't ignore the signal, but it may not run the trap either. You > need the trap on EXIT in there: > > trap "echo trapped; exit" EXIT INT HUP TERM > > That's because it matters whether the shell itself gets the signal, or > an external job that's been run *by* the shell gets the signal. > > E.g. if I run a script that executes "sleep" and kill the sleep, the > TERM trap is not run but the EXIT trap will be. If I kill the shell > itself, the TERM trap is run but the EXIT trap is not. It gets even weirder: neither `kill -HUP`, nor `kill -INT` nor `kill -TERM` with the PID of the shell have any influence on the script if these signals are trapped. What does have an influence is a Ctrl-C and `kill -KILL`. The kill commands (except `kill -INT`) work immediately with bash running the script. Thorsten