1.\" Copyright (c) 1996 The NetBSD Foundation, Inc. 2.\" All rights reserved. 3.\" 4.\" This code is derived from software contributed to The NetBSD Foundation 5.\" by Paul Kranenburg. 6.\" 7.\" Redistribution and use in source and binary forms, with or without 8.\" modification, are permitted provided that the following conditions 9.\" are met: 10.\" 1. Redistributions of source code must retain the above copyright 11.\" notice, this list of conditions and the following disclaimer. 12.\" 2. Redistributions in binary form must reproduce the above copyright 13.\" notice, this list of conditions and the following disclaimer in the 14.\" documentation and/or other materials provided with the distribution. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE 20.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26.\" POSSIBILITY OF SUCH DAMAGE. 27.\" 28.\" $NetBSD: psignal.9,v 1.1 1996/06/22 22:57:35 pk Exp $ 29.\" $FreeBSD$ 30.\" 31.Dd October 8, 2011 32.Dt PSIGNAL 9 33.Os 34.Sh NAME 35.Nm psignal , 36.Nm kern_psignal , 37.Nm pgsignal , 38.Nm gsignal , 39.Nm tdsignal 40.Nd post signal to a thread, process, or process group 41.Sh SYNOPSIS 42.In sys/types.h 43.In sys/signalvar.h 44.Ft void 45.Fn kern_psignal "struct proc *p" "int signum" 46.Ft void 47.Fn pgsignal "struct pgrp *pgrp" "int signum" "int checkctty" 48.Ft void 49.Fn gsignal "int pgid" "int signum" 50.Ft void 51.Fn tdsignal "struct thread *td" "int signum" 52.Sh DESCRIPTION 53These functions post a signal to a thread or one or more processes. 54The argument 55.Fa signum 56common to all three functions should be in the range 57.Bq 1- Ns Dv NSIG . 58.Pp 59The 60.Fn kern_psignal 61function posts signal number 62.Fa signum 63to the process represented by the process structure 64.Fa p . 65The 66.Fn kern_psignal 67function used to be called 68.Fn psignal 69but was renamed in order to eliminate a name collision with the libc 70function of that name and facilitate code reuse. 71With a few exceptions noted below, the target process signal disposition is 72updated and is marked as runnable, so further handling of the signal is done 73in the context of the target process after a context switch. 74Note that 75.Fn kern_psignal 76does not by itself cause a context switch to happen. 77.Pp 78The target process is not marked as runnable in the following cases: 79.Bl -bullet -offset indent 80.It 81The target process is sleeping uninterruptibly. 82The signal will be 83noticed when the process returns from the system call or trap. 84.It 85The target process is currently ignoring the signal. 86.It 87If a stop signal is sent to a sleeping process that takes the 88default action 89(see 90.Xr sigaction 2 ) , 91the process is stopped without awakening it. 92.It 93.Dv SIGCONT 94restarts a stopped process 95(or puts them back to sleep) 96regardless of the signal action 97(e.g., blocked or ignored). 98.El 99.Pp 100If the target process is being traced 101.Fn kern_psignal 102behaves as if the target process were taking the default action for 103.Fa signum . 104This allows the tracing process to be notified of the signal. 105.Pp 106The 107.Fn pgsignal 108function posts signal number 109.Fa signum 110to each member of the process group described by 111.Fa pgrp . 112If 113.Fa checkctty 114is non-zero, the signal will be posted only to processes that have 115a controlling terminal. 116.Fn pgsignal 117is implemented by walking along the process list headed by the field 118.Li pg_members 119of the process group structure 120pointed at by 121.Fa pgrp 122and calling 123.Fn kern_psignal 124as appropriate. 125If 126.Fa pgrp 127is 128.Dv NULL 129no action is taken. 130.Pp 131The 132.Fn gsignal 133function posts signal number 134.Fa signum 135to each member of the process group identified by the group id 136.Fa pgid . 137.Fn gsignal 138first finds the group structure associated with 139.Fa pgid , 140then invokes 141.Fn pgsignal 142with the argument 143.Fa checkctty 144set to zero. 145If 146.Fa pgid 147is zero no action is taken. 148.Pp 149The 150.Fn tdsignal 151function posts signal number 152.Fa signum 153to the thread represented by the thread structure 154.Fa td . 155.Sh SEE ALSO 156.Xr sigaction 2 , 157.Xr signal 9 , 158.Xr tsleep 9 159.Sh HISTORY 160The 161.Fn psignal 162function was renamed to 163.Fn kern_psignal 164in 165.Fx 9.0 . 166