signals.c
author viric@llimona
Mon, 24 Sep 2007 13:59:40 +0200
changeset 38 f1e581c862d5
parent 21 a82c88322eb5
child 47 8dcc45d8f3e5
permissions -rw-r--r--
Improved help. Moving to 0.2.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
6a372f8b4b8a Ignore, license and version.
viric@llimona
parents: 7
diff changeset
     1
/*
6a372f8b4b8a Ignore, license and version.
viric@llimona
parents: 7
diff changeset
     2
    stdin mix - a mixer/multiplexer for stdin to processes
6a372f8b4b8a Ignore, license and version.
viric@llimona
parents: 7
diff changeset
     3
    Copyright (C) 2007  LluĂ­s Batlle i Rossell
6a372f8b4b8a Ignore, license and version.
viric@llimona
parents: 7
diff changeset
     4
6a372f8b4b8a Ignore, license and version.
viric@llimona
parents: 7
diff changeset
     5
    Please find the license in the provided COPYING file.
6a372f8b4b8a Ignore, license and version.
viric@llimona
parents: 7
diff changeset
     6
*/
7
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
     7
#include <signal.h>
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents: 12
diff changeset
     8
#include <string.h>
7
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
     9
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    10
#include "main.h"
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    11
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    12
static int child;
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    13
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    14
static void forward_signals_to_child_handler(int val)
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    15
{
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    16
    kill(child, val);
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    17
}
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    18
21
a82c88322eb5 Big change, from stdinmix to multiterminal.
viric@llimona
parents: 12
diff changeset
    19
void install_signal_forwarders(int _child)
7
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    20
{
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    21
  struct sigaction act;
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    22
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    23
  child = _child;
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    24
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    25
  act.sa_handler = forward_signals_to_child_handler;
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    26
  /* Reset the mask */
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    27
  memset(&act.sa_mask,0,sizeof(act.sa_mask));
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    28
  act.sa_flags = 0;
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    29
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    30
  sigaction(SIGTERM, &act, 0);
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    31
  sigaction(SIGINT, &act, 0);
af8d59476914 Added signal passing.
viric@llimona
parents:
diff changeset
    32
}