1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 27 /* All Rights Reserved */ 28 29 #include <stdio.h> 30 #include <signal.h> 31 #include "tmextern.h" 32 33 /* 34 * catch_signals: 35 * ttymon catch some signals and ignore the rest. 36 * 37 * SIGTERM - killed by somebody 38 * SIGPOLL - got message on pmpipe, probably from sac 39 * or on PCpipe 40 * SIGCLD - tmchild died 41 */ 42 void 43 catch_signals(void) 44 { 45 sigset_t cset; 46 struct sigaction sigact; 47 48 #ifdef DEBUG 49 debug("in catch_signals"); 50 #endif 51 52 cset = Origmask; 53 (void) sigdelset(&cset, SIGTERM); 54 (void) sigdelset(&cset, SIGCLD); 55 (void) sigdelset(&cset, SIGPOLL); 56 #ifdef DEBUG 57 (void) sigdelset(&cset, SIGUSR1); 58 (void) sigdelset(&cset, SIGUSR2); 59 #endif 60 (void) sigprocmask(SIG_SETMASK, &cset, NULL); 61 sigact.sa_flags = 0; 62 sigact.sa_handler = sigterm; 63 (void) sigemptyset(&sigact.sa_mask); 64 (void) sigaddset(&sigact.sa_mask, SIGTERM); 65 (void) sigaction(SIGTERM, &sigact, NULL); 66 sigact.sa_flags = 0; 67 sigact.sa_handler = sigchild; 68 (void) sigemptyset(&sigact.sa_mask); 69 (void) sigaction(SIGCLD, &sigact, NULL); 70 sigact.sa_flags = 0; 71 sigact.sa_handler = sigpoll_catch; 72 (void) sigemptyset(&sigact.sa_mask); 73 (void) sigaddset(&sigact.sa_mask, SIGPOLL); 74 (void) sigaction(SIGPOLL, &sigact, NULL); 75 #ifdef DEBUG 76 sigact.sa_flags = 0; 77 sigact.sa_handler = dump_pmtab; 78 (void) sigemptyset(&sigact.sa_mask); 79 (void) sigaddset(&sigact.sa_mask, SIGUSR1); 80 (void) sigaction(SIGUSR1, &sigact, NULL); 81 sigact.sa_flags = 0; 82 sigact.sa_handler = dump_ttydefs; 83 (void) sigemptyset(&sigact.sa_mask); 84 (void) sigaddset(&sigact.sa_mask, SIGUSR2); 85 (void) sigaction(SIGUSR2, &sigact, NULL); 86 #endif 87 } 88 89 /* 90 * child_sigcatch() - tmchild inherits some signal_catch from parent 91 * and need to reset them 92 */ 93 void 94 child_sigcatch(void) 95 { 96 struct sigaction sigact; 97 sigset_t cset; 98 99 cset = Origmask; 100 (void) sigdelset(&cset, SIGINT); 101 (void) sigdelset(&cset, SIGPOLL); 102 (void) sigprocmask(SIG_SETMASK, &cset, NULL); 103 sigact.sa_flags = 0; 104 sigact.sa_handler = sigpoll; 105 (void) sigemptyset(&sigact.sa_mask); 106 (void) sigaddset(&sigact.sa_mask, SIGPOLL); 107 (void) sigaction(SIGPOLL, &sigact, NULL); 108 sigact.sa_flags = 0; 109 sigact.sa_handler = sigint; 110 (void) sigemptyset(&sigact.sa_mask); 111 (void) sigaddset(&sigact.sa_mask, SIGINT); 112 (void) sigaction(SIGINT, &sigact, NULL); 113 } 114