From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20525 invoked by alias); 20 Dec 2001 09:10:27 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Received: (qmail 20458 invoked from network); 20 Dec 2001 09:10:25 -0000 Received: from unknown (HELO mail.brokat.de) (212.9.175.131) by sources.redhat.com with SMTP; 20 Dec 2001 09:10:25 -0000 Received: by mail.brokat.de (Smail3.2.0.111/mail.brokat.de) via LF.net GmbH Internet Services via remoteip 172.17.24.197 via remotehost pcmrumpf with smtp for sourceware.cygnus.com id m16GzEf-001mmXC; Thu, 20 Dec 2001 10:11:29 +0100 (CET) Message-ID: <003c01c18936$55ca5fd0$c51811ac@brokat.de> From: "Michael Rumpf" To: References: <00f201c18922$2783b180$c51811ac@brokat.de> Subject: Re: bash/cmd CTRL-C problem... Date: Thu, 20 Dec 2001 01:28:00 -0000 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 X-SW-Source: 2001-12/txt/msg00985.txt.bz2 Hi, sorry for following up myself, but I found out that Cygwin equally handles CTRL-BREAK and CTRL-C by sending a SIGINT to the process. See http://groups.yahoo.com/group/gnu-win32/message/27643 (last sentence). This seems to be the source of the problem. CTRL-BREAK under the cmd shell terminates the process after handling the signal without further executing any code. The bad thing is that under bash the same behaviour follows from pressing CTRL-BREAK _and_ CTRL-C !! If this is a design issue, can someone please explain what the reasons are... We have an application that forks other processes. The main thread is waiting for the signal handler to return in order to cleanly stop the child processes. By just stopping the parent process the child processes keep running and I have to kill them manually each time I press CTRL-C. The same application is working fine under windows cmd shell and bash under Linux , HP-UX 10/11, AIX4.x, and SunOS 2.5+... Please help, I don't want to use the stupid windows cmd shell.... ;-) Michael ----- Original Message ----- From: "Michael Rumpf" To: Sent: Thursday, December 20, 2001 7:47 AM Subject: bash/cmd CTRL-C problem... > Hi, > > I'm new to the list and I don't know if this problem is already solved, but > I couldn't find a hint neither on the archives nor on the FAQ or somewhere > else on the net. > > My problem is related to bash/cmd and signal handling. > In my app I installed a signal handler for SIGINT. The app is going into a > wait loop and waiting for the exit flag from the signal handler to be set. > > When pressing CTRL-C in the windows cmd shell the application continues > normally after the signal handler has been caught. Under bash the signal > handler is also correctly called, but after that the app is exiting > immediatly, i.e. not continuing with the code. > Here is the source: > > //////////////////////////////////////////////////////////////////////////// > ///////////////// > #include > #include > #include > > bool loop = true; > > extern "C" void signalHandler(int sig) > { > switch( sig ) > { > case SIGINT: // == 2 > printf("SIGINT=%d\n",sig); > break; > default: > printf("default=%d\n",sig); > break; > }; > loop=false; > } > > int main(int argc, char* argv[]) > { > if (signal( SIGINT , signalHandler ) == SIG_ERR) > return -1; > printf("### ctrlbreak: Waiting now...\n"); > while(loop) > Sleep ((DWORD) 1000) ; > printf("### ctrlbreak: Finished waiting now...\n"); > return 0; > } > //////////////////////////////////////////////////////////////////////////// > ///////////////// > > Here the the output of the app under Win2K/bash: > // bash 2.05a-2 > $ ./ctrlbreak.exe > ### ctrlbreak: Waiting now... > SIGINT=2 > > > // GNU bash, version 2.02.1(2)-release (i586-pc-cygwin32) B20.1 > bash-2.02$ ./ctrlbreak > ### ctrlbreak: Waiting now... > SIGINT=2 > > // cmd.exe Win2k SP2 > ### ctrlbreak: Waiting now... > SIGINT=2 > ### ctrlbreak: Finished waiting now... > > > You can see that under the cmd shell the text "Finished waiting now..." is > printed which does not come out under the bash. The app is not linked > against any cygwin library. It is a plain VC++ console application. But when > I compile with gcc from the cygwin package I have the same result. > Any hint would be greatly appreciated... > > Michael > > PS: I just downloaded the latest stable version 1.3.6 today... > > > > -- > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > Bug reporting: http://cygwin.com/bugs.html > Documentation: http://cygwin.com/docs.html > FAQ: http://cygwin.com/faq/ > > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/