diff options
author | sef <sef@FreeBSD.org> | 1997-12-06 04:11:14 +0000 |
---|---|---|
committer | sef <sef@FreeBSD.org> | 1997-12-06 04:11:14 +0000 |
commit | c7d273eccbdbad69eed3ca880a3956ca804a83c8 (patch) | |
tree | 213faf73090825488ed9bc01587c6f942d45f53e /sys/kern/sys_process.c | |
parent | 9821c0958535e623d28d6d4fc1d1ac205a20ec36 (diff) | |
download | FreeBSD-src-c7d273eccbdbad69eed3ca880a3956ca804a83c8.zip FreeBSD-src-c7d273eccbdbad69eed3ca880a3956ca804a83c8.tar.gz |
Changes to allow event-based process monitoring and control.
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r-- | sys/kern/sys_process.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index 28007f72..c289115 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sys_process.c,v 1.31 1997/11/06 19:29:22 phk Exp $ + * $Id: sys_process.c,v 1.32 1997/11/12 12:28:12 tegge Exp $ */ #include <sys/param.h> @@ -503,3 +503,22 @@ trace_req(p) { return 1; } + +/* + * stopevent() + * Stop a process because of a procfs event; + * stay stopped until p->p_step is cleared + * (cleared by PIOCCONT in procfs). + */ + +void +stopevent(struct proc *p, unsigned int event, unsigned int val) { + p->p_step = 1; + + do { + p->p_xstat = val; + p->p_stype = event; /* Which event caused the stop? */ + wakeup(&p->p_stype); /* Wake up any PIOCWAIT'ing procs */ + tsleep(&p->p_step, PWAIT, "stopevent", 0); + } while (p->p_step); +} |