From owner-freebsd-questions@FreeBSD.ORG Wed Feb 7 15:30:38 2007 Return-Path: X-Original-To: freebsd-questions@freebsd.org Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D671C16A406 for ; Wed, 7 Feb 2007 15:30:37 +0000 (UTC) (envelope-from asanjuan@bolsabilbao.es) Received: from correo-1.bolsabilbao.es (correo-1.bolsabilbao.es [212.8.77.215]) by mx1.freebsd.org (Postfix) with ESMTP id 3E90213C461 for ; Wed, 7 Feb 2007 15:30:36 +0000 (UTC) (envelope-from asanjuan@bolsabilbao.es) Received: from correo_6.bolsabilbao.es ([10.33.5.206]) by correo-1.bolsabilbao.es with Microsoft SMTPSVC(6.0.3790.1830); Wed, 7 Feb 2007 16:19:28 +0100 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-class: urn:content-classes:message X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.2826 Date: Wed, 7 Feb 2007 16:18:53 +0100 Message-ID: In-Reply-To: <6FA4E8E8A0FAD64F9AF5A1F0FDB8C6EE1211@BB06.bolsabilbao.local> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Restrict access to custom shell scripts Thread-Index: AcaDF2kLGXu1eHE3QXi6SZUi72ko+THsS/Fw From: "Aitor San Juan" To: X-OriginalArrivalTime: 07 Feb 2007 15:19:28.0160 (UTC) FILETIME=[5BC1EA00:01C74ACB] Importance: normal Priority: normal X-ExchangeSecure-AntiSpam: valid(0) Subject: Trapping signal from shell script... doesn't seem to work? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Feb 2007 15:30:38 -0000 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. *************************************************************************= *