Trapping signal from shell script... doesn't seem to work?
Derek Ragona
derek at computinginnovations.com
Wed Feb 7 22:08:14 UTC 2007
I believe what you are seeing is the login shell you are running holding
back the signal as it first traps the signals. You should try running the
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=`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
>babestuta dagoena. Zuri zuzendua ez bada, bidali duenari esan eta ezabatu,
>inori berbidali edo gorde gabe, legeak debekatzen duelako mezuak
>erabiltzea baimenik gabe.
>--------------------------------------------------------------------------
>Este mensaje puede contener información confidencial, en propiedad o
>legalmente protegida. Si usted no es el destinatario, le rogamos lo
>comunique al remitente y proceda a borrarlo, sin reenviarlo ni
>conservarlo, ya que su uso no autorizado está prohibido legalmente.
>--------------------------------------------------------------------------
>This message may contain confidential, proprietary or legally privileged
>information. If you are not the intended recipient of this message, please
>notify it to the sender and delete without resending or backing it, as it
>is legally prohibited.
>**************************************************************************
>_______________________________________________
>freebsd-questions at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-questions
>To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"
>
>--
>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.
--
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.
More information about the freebsd-questions
mailing list