delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-apps/2001/12/19/16:17:37

Mailing-List: contact cygwin-apps-help AT cygwin DOT com; run by ezmlm
Sender: cygwin-apps-owner AT cygwin DOT com
List-Subscribe: <mailto:cygwin-apps-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-apps/>
List-Post: <mailto:cygwin-apps AT cygwin DOT com>
List-Help: <mailto:cygwin-apps-help AT cygwin DOT com>, <http://sources.redhat.com/lists.html#faqs>
Delivered-To: mailing list cygwin-apps AT cygwin DOT com
Message-ID: <008101c188d2$b95e76d0$c51811ac@brokat.de>
From: "Michael Rumpf" <michael AT rumpfonline DOT de>
To: <cygwin-apps AT cygwin DOT com>
Subject: bash/cmd and CTRL-C problem...
Date: Wed, 19 Dec 2001 22:18:37 +0100
MIME-Version: 1.0
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

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 <windows.h>
#include <stdio.h>
#include <signal.h>

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.
Any hint would be greatly appreciated...

Michael

PS: I just downloaded the latest stable version 1.3.6 today...


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019