1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
#ifndef _SYS_PROCSET_H
#define _SYS_PROCSET_H
#pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.6 */
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/feature_tests.h>
#include <sys/types.h>
#include <sys/signal.h>
/*
* This file defines the data needed to specify a set of
* processes. These types are used by the sigsend, sigsendset,
* priocntl, priocntlset, waitid, evexit, and evexitset system
* calls.
*/
#define P_INITPID 1
#define P_INITUID 0
#define P_INITPGID 0
#ifndef _IDTYPE_T_DECLARED
/*
* The following defines the values for an identifier type. It
* specifies the interpretation of an id value. An idtype and
* id together define a simple set of processes.
*/
typedef enum
#if !defined(_XPG4_2) || defined(__EXTENSIONS__)
idtype /* pollutes XPG4.2 namespace */
#endif
{
P_PID, /* A process identifier. */
P_PPID, /* A parent process identifier. */
P_PGID, /* A process group (job control group) */
/* identifier. */
P_SID, /* A session identifier. */
P_CID, /* A scheduling class identifier. */
P_UID, /* A user identifier. */
P_GID, /* A group identifier. */
P_ALL, /* All processes. */
P_LWPID, /* An LWP identifier. */
P_TASKID, /* A task identifier. */
P_PROJID, /* A project identifier. */
P_POOLID, /* A pool identifier. */
P_ZONEID, /* A zone identifier. */
P_CTID, /* A (process) contract identifier. */
P_CPUID, /* CPU identifier. */
P_PSETID /* Processor set identifier */
} idtype_t;
#define _IDTYPE_T_DECLARED
#endif
/*
* The following defines the operations which can be performed to
* combine two simple sets of processes to form another set of
* processes.
*/
#if !defined(_XPG4_2) || defined(__EXTENSIONS__)
typedef enum idop {
POP_DIFF, /* Set difference. The processes which */
/* are in the left operand set and not */
/* in the right operand set. */
POP_AND, /* Set disjunction. The processes */
/* which are in both the left and right */
/* operand sets. */
POP_OR, /* Set conjunction. The processes */
/* which are in either the left or the */
/* right operand sets (or both). */
POP_XOR /* Set exclusive or. The processes */
/* which are in either the left or */
/* right operand sets but not in both. */
} idop_t;
/*
* The following structure is used to define a set of processes.
* The set is defined in terms of two simple sets of processes
* and an operator which operates on these two operand sets.
*/
typedef struct procset {
idop_t p_op; /* The operator connection the */
/* following two operands each */
/* of which is a simple set of */
/* processes. */
idtype_t p_lidtype;
/* The type of the left operand */
/* simple set. */
id_t p_lid; /* The id of the left operand. */
idtype_t p_ridtype;
/* The type of the right */
/* operand simple set. */
id_t p_rid; /* The id of the right operand. */
} procset_t;
/*
* The following macro can be used to initialize a procset_t
* structure.
*/
#define setprocset(psp, op, ltype, lid, rtype, rid) \
(psp)->p_op = (op); \
(psp)->p_lidtype = (ltype); \
(psp)->p_lid = (lid); \
(psp)->p_ridtype = (rtype); \
(psp)->p_rid = (rid);
#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) */
#if defined(sun)
#ifdef _KERNEL
struct proc;
extern int dotoprocs(procset_t *, int (*)(), char *);
extern int dotolwp(procset_t *, int (*)(), char *);
extern int procinset(struct proc *, procset_t *);
extern int sigsendproc(struct proc *, sigsend_t *);
extern int sigsendset(procset_t *, sigsend_t *);
extern boolean_t cur_inset_only(procset_t *);
extern id_t getmyid(idtype_t);
#endif /* _KERNEL */
#endif
#ifdef __cplusplus
}
#endif
#endif /* _SYS_PROCSET_H */
|