Lines Matching defs:pgrp

105 MALLOC_DEFINE(M_PGRP, "pgrp", "process group header");
110 static void doenterpgrp(struct proc *, struct pgrp *);
111 static void orphanpg(struct pgrp *pg);
116 static void pgadjustjobc(struct pgrp *pgrp, int entering);
117 static void pgdelete(struct pgrp *);
356 struct pgrp *
360 register struct pgrp *pgrp;
364 LIST_FOREACH(pgrp, PGRPHASH(pgid), pg_hash) {
365 if (pgrp->pg_id == pgid) {
366 PGRP_LOCK(pgrp);
367 return (pgrp);
438 enterpgrp(p, pgid, pgrp, sess)
441 struct pgrp *pgrp;
447 KASSERT(pgrp != NULL, ("enterpgrp: pgrp == NULL"));
449 ("enterpgrp: new pgrp and pid != pgid"));
451 ("enterpgrp: pgrp with pgid exists"));
455 mtx_init(&pgrp->pg_mtx, "process group", NULL, MTX_DEF | MTX_DUPOK);
465 PGRP_LOCK(pgrp);
474 pgrp->pg_session = sess;
478 pgrp->pg_session = p->p_session;
479 sess_hold(pgrp->pg_session);
480 PGRP_LOCK(pgrp);
482 pgrp->pg_id = pgid;
483 LIST_INIT(&pgrp->pg_members);
489 LIST_INSERT_HEAD(PGRPHASH(pgid), pgrp, pg_hash);
490 pgrp->pg_jobc = 0;
491 SLIST_INIT(&pgrp->pg_sigiolst);
492 PGRP_UNLOCK(pgrp);
494 doenterpgrp(p, pgrp);
503 enterthispgrp(p, pgrp)
505 struct pgrp *pgrp;
510 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED);
513 KASSERT(pgrp->pg_session == p->p_session,
514 ("%s: pgrp's session %p, p->p_session %p.\n",
516 pgrp->pg_session,
518 KASSERT(pgrp != p->p_pgrp,
519 ("%s: p belongs to pgrp.", __func__));
521 doenterpgrp(p, pgrp);
530 doenterpgrp(p, pgrp)
532 struct pgrp *pgrp;
534 struct pgrp *savepgrp;
538 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED);
549 fixjobc(p, pgrp, 1);
552 PGRP_LOCK(pgrp);
556 p->p_pgrp = pgrp;
558 LIST_INSERT_HEAD(&pgrp->pg_members, p, p_pglist);
560 PGRP_UNLOCK(pgrp);
572 struct pgrp *savepgrp;
591 pgdelete(pgrp)
592 register struct pgrp *pgrp;
598 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED);
599 SESS_LOCK_ASSERT(pgrp->pg_session, MA_NOTOWNED);
605 funsetownlst(&pgrp->pg_sigiolst);
607 PGRP_LOCK(pgrp);
608 tp = pgrp->pg_session->s_ttyp;
609 LIST_REMOVE(pgrp, pg_hash);
610 savesess = pgrp->pg_session;
611 PGRP_UNLOCK(pgrp);
613 /* Remove the reference to the pgrp before deallocating it. */
616 tty_rel_pgrp(tp, pgrp);
619 mtx_destroy(&pgrp->pg_mtx);
620 free(pgrp, M_PGRP);
625 pgadjustjobc(pgrp, entering)
626 struct pgrp *pgrp;
630 PGRP_LOCK(pgrp);
632 pgrp->pg_jobc++;
634 --pgrp->pg_jobc;
635 if (pgrp->pg_jobc == 0)
636 orphanpg(pgrp);
638 PGRP_UNLOCK(pgrp);
642 * Adjust pgrp jobc counters when specified process changes process group.
652 fixjobc(struct proc *p, struct pgrp *pgrp, int entering)
654 struct pgrp *hispgrp;
660 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED);
661 SESS_LOCK_ASSERT(pgrp->pg_session, MA_NOTOWNED);
667 mysession = pgrp->pg_session;
668 if ((hispgrp = p->p_pptr->p_pgrp) != pgrp &&
670 pgadjustjobc(pgrp, entering);
679 if (hispgrp == pgrp ||
700 * proctree_lock held. pgrp and LIST_EMPTY checks are for fixjobc().
729 * Signal foreground pgrp and revoke access to
768 struct pgrp *pg;
815 register struct pgrp *pgrp;
822 LIST_FOREACH(pgrp, &pgrphashtbl[i], pg_hash) {
825 (void *)pgrp, (long)pgrp->pg_id,
826 (void *)pgrp->pg_session,
827 pgrp->pg_session->s_count,
828 (void *)LIST_FIRST(&pgrp->pg_members));
829 LIST_FOREACH(p, &pgrp->pg_members, p_pglist) {
830 printf("\t\tpid %ld addr %p pgrp %p\n",
1478 /* could do this by traversing pgrp */
2876 static SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD | CTLFLAG_MPSAFE,