summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authorsef <sef@FreeBSD.org>1997-12-06 04:11:14 +0000
committersef <sef@FreeBSD.org>1997-12-06 04:11:14 +0000
commitc7d273eccbdbad69eed3ca880a3956ca804a83c8 (patch)
tree213faf73090825488ed9bc01587c6f942d45f53e /sys/kern/sys_process.c
parent9821c0958535e623d28d6d4fc1d1ac205a20ec36 (diff)
downloadFreeBSD-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.c21
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);
+}
OpenPOWER on IntegriCloud