[mpich-discuss] mpiexec hydra : signal handling SIGINT with popen

Balaji, Pavan balaji at anl.gov
Sun Feb 15 16:01:51 CST 2015


Hirak,

The signal is forwarded to the MPI processes.  I don't know how "popen" works compared to the "system" call, to comment on why one is working and the other isn't.

  -- Pavan

> On Feb 14, 2015, at 11:27 AM, Roy, Hirak <Hirak_Roy at mentor.com> wrote:
> 
> Hi All,
>  
> I am using a wrapper program which runs “mpiexec –n 5 actual_program” using a popen command.
> [ This is the simplified version of running my program. Ideally there is a TCL layer which does these things].
> I have attached my program here.
>  
> My actual program has installed SIGINT signal handler and takes some action before it exits.
> It also writes lot of information on stdout and a file.
>  
> In general, if I press CTRL+C, I expect SIGINT to be passed to all the underlying processes.
> However, in my case, although the processes receive SIGINT, they are killed immediately.
>  
> I have noticed that If I run using 
> system(“mpiexec –n 5 actual_program”),  SIGINT is delivered and appropriate actions are taken.
>  
> I am a bit confused here. The only thing I can relate is that there is somehow a SIGPIPE signal which might lead mpiexec to kill all subprocesses.
> Can someone please have a look and let me know what is the issue here and what can be a done.
>  
> Thanks,
> Hirak
>  
> // wrapper program
>  
> #include <stdio.h>
> #include <signal.h>
> #include <string.h>
> #include <stdlib.h>
>  
>  
>  
> int main ()
> {
>  
>   const char* command = "mpiexec -n 5  ./mpiprog.out";
>   #if 1
>   FILE *fp = popen(command, "r");
>   if (!fp) {
>     printf ("failed\n");
>   }
>   while (!feof(fp)) {
>     char ch ;
>     fscanf(fp, "%c", &ch);
>     printf ("%c", ch);
>   }
>  
>   pclose(fp);
> #else 
>   system (command);
> #endif
> }
>  
> //mpiprog.c
> #include "mpi.h"
> #include <signal.h>
> #include <string.h>
> #include <stdio.h>
> #include <stdlib.h>
>  
> void signalHandler(int signum, siginfo_t *info, void *ptr)
> {
>   fprintf (stdout,"******** SIGINT *******************\n");
>   MPI_Finalize();
>   exit (0);
> }
>  
> int main(int argc, char** argv)
> {
>   struct sigaction act;
>   memset(&act, 0, sizeof(act));
>   act.sa_sigaction = signalHandler;
>   act.sa_flags = SA_SIGINFO;
>   sigaction(SIGINT, &act, NULL);
>   
>   
>   MPI_Init(&argc, &argv);
>  
>  
>   while (1) 
>   {
>  
>     sleep (10);
>     printf ("---Hhahaha\n");
>   }
>  
>   MPI_Finalize();
> }
>  
>  
> _______________________________________________
> discuss mailing list     discuss at mpich.org
> To manage subscription options or unsubscribe:
> https://lists.mpich.org/mailman/listinfo/discuss

--
Pavan Balaji  ✉️
http://www.mcs.anl.gov/~balaji

_______________________________________________
discuss mailing list     discuss at mpich.org
To manage subscription options or unsubscribe:
https://lists.mpich.org/mailman/listinfo/discuss


More information about the discuss mailing list