Lines Matching refs:pgrp

109 static void doenterpgrp(struct proc *, struct pgrp *);
110 static void orphanpg(struct pgrp *pg);
115 static void pgdelete(struct pgrp *);
202 pgrp_zone = uma_zcreate("PGRP", sizeof(struct pgrp), NULL, NULL, in procinit()
310 struct pgrp *pg; in pgrp_init()
489 struct pgrp *
492 struct pgrp *pgrp; in pgfind() local
496 LIST_FOREACH(pgrp, PGRPHASH(pgid), pg_hash) { in pgfind()
497 if (pgrp->pg_id == pgid) { in pgfind()
498 PGRP_LOCK(pgrp); in pgfind()
499 return (pgrp); in pgfind()
576 enterpgrp(struct proc *p, pid_t pgid, struct pgrp *pgrp, struct session *sess) in enterpgrp() argument
578 struct pgrp *old_pgrp; in enterpgrp()
582 KASSERT(pgrp != NULL, ("enterpgrp: pgrp == NULL")); in enterpgrp()
607 PGRP_LOCK(pgrp); in enterpgrp()
617 pgrp->pg_session = sess; in enterpgrp()
621 pgrp->pg_session = p->p_session; in enterpgrp()
622 sess_hold(pgrp->pg_session); in enterpgrp()
623 PGRP_LOCK(pgrp); in enterpgrp()
625 pgrp->pg_id = pgid; in enterpgrp()
627 LIST_INIT(&pgrp->pg_members); in enterpgrp()
628 pgrp->pg_flags = 0; in enterpgrp()
634 LIST_INSERT_HEAD(PGRPHASH(pgid), pgrp, pg_hash); in enterpgrp()
635 SLIST_INIT(&pgrp->pg_sigiolst); in enterpgrp()
636 PGRP_UNLOCK(pgrp); in enterpgrp()
638 doenterpgrp(p, pgrp); in enterpgrp()
648 enterthispgrp(struct proc *p, struct pgrp *pgrp) in enterthispgrp() argument
650 struct pgrp *old_pgrp; in enterthispgrp()
654 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED); in enterthispgrp()
657 KASSERT(pgrp->pg_session == p->p_session, in enterthispgrp()
659 __func__, pgrp->pg_session, p->p_session, p)); in enterthispgrp()
660 KASSERT(pgrp != p->p_pgrp, in enterthispgrp()
661 ("%s: p %p belongs to pgrp %p", __func__, p, pgrp)); in enterthispgrp()
671 if (!sx_try_xlock(&pgrp->pg_killsx)) { in enterthispgrp()
674 sx_xlock(&pgrp->pg_killsx); in enterthispgrp()
675 sx_xunlock(&pgrp->pg_killsx); in enterthispgrp()
679 doenterpgrp(p, pgrp); in enterthispgrp()
681 sx_xunlock(&pgrp->pg_killsx); in enterthispgrp()
691 isjobproc(struct proc *q, struct pgrp *pgrp) in isjobproc() argument
695 return (q->p_pgrp != pgrp && in isjobproc()
696 q->p_pgrp->pg_session == pgrp->pg_session); in isjobproc()
729 pgrp_calc_jobc(struct pgrp *pgrp) in pgrp_calc_jobc() argument
735 if (!mtx_owned(&pgrp->pg_mtx)) in pgrp_calc_jobc()
740 LIST_FOREACH(q, &pgrp->pg_members, p_pglist) { in pgrp_calc_jobc()
744 if (isjobproc(jobc_parent(q, NULL), pgrp)) in pgrp_calc_jobc()
754 doenterpgrp(struct proc *p, struct pgrp *pgrp) in doenterpgrp() argument
756 struct pgrp *savepgrp; in doenterpgrp()
761 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED); in doenterpgrp()
768 PGRP_LOCK(pgrp); in doenterpgrp()
774 p->p_pgrp = pgrp; in doenterpgrp()
776 LIST_INSERT_HEAD(&pgrp->pg_members, p, p_pglist); in doenterpgrp()
777 if (isjobproc(pp, pgrp)) in doenterpgrp()
778 pgrp->pg_flags &= ~PGRP_ORPHANED; in doenterpgrp()
780 PGRP_UNLOCK(pgrp); in doenterpgrp()
791 struct pgrp *savepgrp; in leavepgrp()
810 pgdelete(struct pgrp *pgrp) in pgdelete() argument
816 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED); in pgdelete()
817 SESS_LOCK_ASSERT(pgrp->pg_session, MA_NOTOWNED); in pgdelete()
824 funsetownlst(&pgrp->pg_sigiolst); in pgdelete()
826 PGRP_LOCK(pgrp); in pgdelete()
827 tp = pgrp->pg_session->s_ttyp; in pgdelete()
828 LIST_REMOVE(pgrp, pg_hash); in pgdelete()
829 savesess = pgrp->pg_session; in pgdelete()
830 PGRP_UNLOCK(pgrp); in pgdelete()
835 tty_rel_pgrp(tp, pgrp); in pgdelete()
838 proc_id_clear(PROC_ID_GROUP, pgrp->pg_id); in pgdelete()
839 uma_zfree(pgrp_zone, pgrp); in pgdelete()
848 struct pgrp *pgrp; in fixjobc_kill() local
852 pgrp = p->p_pgrp; in fixjobc_kill()
853 PGRP_LOCK_ASSERT(pgrp, MA_NOTOWNED); in fixjobc_kill()
854 SESS_LOCK_ASSERT(pgrp->pg_session, MA_NOTOWNED); in fixjobc_kill()
867 pgrp = p->p_pgrp; in fixjobc_kill()
868 if (isjobproc(jobc_parent(p, NULL), pgrp)) { in fixjobc_kill()
869 PGRP_LOCK(pgrp); in fixjobc_kill()
870 if (pgrp_calc_jobc(pgrp) == 0) in fixjobc_kill()
871 orphanpg(pgrp); in fixjobc_kill()
872 PGRP_UNLOCK(pgrp); in fixjobc_kill()
880 pgrp = q->p_pgrp; in fixjobc_kill()
881 PGRP_LOCK(pgrp); in fixjobc_kill()
882 if (pgrp_calc_jobc(pgrp) == 0) { in fixjobc_kill()
889 if (jobc_parent(q, p) == p && isjobproc(p, pgrp)) in fixjobc_kill()
890 orphanpg(pgrp); in fixjobc_kill()
892 pgrp->pg_flags &= ~PGRP_ORPHANED; in fixjobc_kill()
893 PGRP_UNLOCK(pgrp); in fixjobc_kill()
896 pgrp = q->p_pgrp; in fixjobc_kill()
897 PGRP_LOCK(pgrp); in fixjobc_kill()
898 if (pgrp_calc_jobc(pgrp) == 0) { in fixjobc_kill()
899 if (isjobproc(p, pgrp)) in fixjobc_kill()
900 orphanpg(pgrp); in fixjobc_kill()
902 pgrp->pg_flags &= ~PGRP_ORPHANED; in fixjobc_kill()
903 PGRP_UNLOCK(pgrp); in fixjobc_kill()
973 orphanpg(struct pgrp *pg) in orphanpg()
1022 db_print_pgrp_one(struct pgrp *pgrp, struct proc *p) in db_print_pgrp_one() argument
1028 p->p_pptr == NULL ? 0 : isjobproc(p->p_pptr, pgrp)); in db_print_pgrp_one()
1033 struct pgrp *pgrp; in DB_SHOW_COMMAND_FLAGS() local
1040 LIST_FOREACH(pgrp, &pgrphashtbl[i], pg_hash) { in DB_SHOW_COMMAND_FLAGS()
1043 pgrp, (int)pgrp->pg_id, pgrp->pg_session, in DB_SHOW_COMMAND_FLAGS()
1044 pgrp->pg_session->s_count, in DB_SHOW_COMMAND_FLAGS()
1045 LIST_FIRST(&pgrp->pg_members)); in DB_SHOW_COMMAND_FLAGS()
1046 LIST_FOREACH(p, &pgrp->pg_members, p_pglist) in DB_SHOW_COMMAND_FLAGS()
1047 db_print_pgrp_one(pgrp, p); in DB_SHOW_COMMAND_FLAGS()
1200 struct pgrp *pgrp; in fill_kinfo_proc_pgrp() local
1205 pgrp = p->p_pgrp; in fill_kinfo_proc_pgrp()
1206 if (pgrp == NULL) in fill_kinfo_proc_pgrp()
1209 kp->ki_pgid = pgrp->pg_id; in fill_kinfo_proc_pgrp()
1210 kp->ki_jobc = pgrp_calc_jobc(pgrp); in fill_kinfo_proc_pgrp()
1212 sp = pgrp->pg_session; in fill_kinfo_proc_pgrp()
3355 static SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD | CTLFLAG_MPSAFE,