Date: Wed, 7 Feb 2007 16:18:53 +0100 From: "Aitor San Juan" <asanjuan@bolsabilbao.es> To: <freebsd-questions@freebsd.org> Subject: Trapping signal from shell script... doesn't seem to work? Message-ID: <D44BEB355E6EC14C9B825F8C956E12E1E4C1@BB06.bolsabilbao.local> In-Reply-To: <6FA4E8E8A0FAD64F9AF5A1F0FDB8C6EE1211@BB06.bolsabilbao.local>
next in thread | previous in thread | raw e-mail | index | archive | help
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 *************=20 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.=20 -------------------------------------------------------------------------= - Este mensaje puede contener informaci=F3n 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=E1 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. *************************************************************************= *
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?D44BEB355E6EC14C9B825F8C956E12E1E4C1>