Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 07 Feb 2007 16:07:23 -0600
From:      Derek Ragona <derek@computinginnovations.com>
To:        "Aitor San Juan" <asanjuan@bolsabilbao.es>, <freebsd-questions@freebsd.org>
Subject:   Re: Trapping signal from shell script... doesn't seem to work?
Message-ID:  <6.0.0.22.2.20070207160529.027c8ab0@mail.computinginnovations.com>
In-Reply-To: <D44BEB355E6EC14C9B825F8C956E12E1E4C1@BB06.bolsabilbao.loca l>
References:  <6FA4E8E8A0FAD64F9AF5A1F0FDB8C6EE1211@BB06.bolsabilbao.local> <D44BEB355E6EC14C9B825F8C956E12E1E4C1@BB06.bolsabilbao.local>

next in thread | previous in thread | raw e-mail | index | archive | help
I believe what you are seeing is the login shell you are running holding=20
back the signal as it first traps the signals.  You should try running the=
=20
script non-interactively from cron or nohup.

         -Derek


At 09:18 AM 2/7/2007, Aitor San Juan wrote:
>Hi list!
>
>I have written a Bourne shell script. This shell script invokes a
>program written in the C language.
>
>Below is basically the shell script source code. As you can see,
>the C program is not invoked in the background, but in the
>foreground, so the shell script doesn't finish until the C program
>has finished.
>
>I want the shell script to trap TERM or INT signals, so when any
>of these are raised, the shell script will try to send SIGTERM to
>the program "myprog":
>
>user1:/usr/home/user1$ ps -ax | grep -v grep | grep myprog
>   PID  TT  STAT      TIME COMMAND
>22406  p0  I+     0:00.01 /bin/sh ../cronjobs/myshell.sh
>22449  p0  I+     0:00.00 /usr/home/user1/myprog -d
>
>user1:/usr/home/user1$ kill -TERM 22406
>
>user1:/usr/home/user1$ ps -ax | grep -v grep | grep myprog
>   PID  TT  STAT      TIME COMMAND
>22406  p0  S+     0:00.01 /bin/sh ../cronjobs/myshell.sh
>22449  p0  I+     0:00.00 /usr/home/user1/myprog -d
>
>I notice the change in state of the shell script process from I+
>to S+, but nothing else happens. The shell script seems to remain
>in execution. However as soons as I press Ctrl-C at the terminal
>where I invoked the shell script, it indeed receives the Ctrl-C,
>but "myprog" receives it first so when the function "trap_handler"
>executes, there is no "myprog" process in memory.
>
>My question: Can anybody tell me what happens and/or what am I
>doing wrong? Why must I press Ctrl-C to force the shell script to
>finally receive the TERM signal when I executed the kill command
>from another session? What is this apparent delay due to?
>
>Thanks in advance.
>
>#------------------ SHELL SCRIPT BEGIN ------------------
>#!/bin/sh
>#
>trap_handler() {
>     echo "*** SYSTEM SIGNAL RECEIVED ***"
>     echo "$1 caught. Ending..."
>     pid=3D`find_myprog's_PID`
>     kill -TERM $pid
>     exit 1
>}
>
>trap 'trap_handler SIGINT' INT
>trap 'trap_handler SIGTERM' TERM
>
>/usr/home/user1/myprog -d
>#------------------ SHELL SCRIPT END ------------------
>
>
>************ LEGEZKO OHARRA / AVISO LEGAL / LEGAL ADVICE *************
>Mezu honek isilpeko informazioa gorde dezake, edo jabea duena, edota legez=
=20
>babestuta dagoena. Zuri zuzendua ez bada, bidali duenari esan eta ezabatu,=
=20
>inori berbidali edo gorde gabe, legeak debekatzen duelako mezuak=20
>erabiltzea baimenik gabe.
>--------------------------------------------------------------------------
>Este mensaje puede contener informaci=F3n confidencial, en propiedad o=20
>legalmente protegida. Si usted no es el destinatario, le rogamos lo=20
>comunique al remitente y proceda a borrarlo, sin reenviarlo ni=20
>conservarlo, ya que su uso no autorizado est=E1 prohibido legalmente.
>--------------------------------------------------------------------------
>This message may contain confidential, proprietary or legally privileged=
=20
>information. If you are not the intended recipient of this message, please=
=20
>notify it to the sender and delete without resending or backing it, as it=
=20
>is legally prohibited.
>**************************************************************************
>_______________________________________________
>freebsd-questions@freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-questions
>To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.or=
g"
>
>--
>This message has been scanned for viruses and
>dangerous content by MailScanner, and is
>believed to be clean.
>MailScanner thanks transtec Computers for their support.

--=20
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
MailScanner thanks transtec Computers for their support.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6.0.0.22.2.20070207160529.027c8ab0>