Lines Matching defs:pr

119 	struct process *pr, *qr, *nqr;
124 pr = p->p_p;
135 if (flags == EXIT_NORMAL && !(pr->ps_flags & PS_EXITING)) {
136 if (pr->ps_pid == 1)
139 atomic_setbits_int(&pr->ps_flags, PS_EXITING);
140 pr->ps_xexit = xexit;
141 pr->ps_xsig = xsig;
147 if (pr->ps_flags & PS_PPWAIT) {
148 atomic_clearbits_int(&pr->ps_flags, PS_PPWAIT);
149 atomic_clearbits_int(&pr->ps_pptr->ps_flags,
151 wakeup(pr->ps_pptr);
155 refcnt_finalize(&pr->ps_refcnt, "psdtor");
159 mtx_enter(&pr->ps_mtx);
160 TAILQ_REMOVE(&pr->ps_threads, p, p_thr_link);
161 pr->ps_threadcnt--;
162 pr->ps_exitcnt++;
168 if (pr->ps_single) {
169 if (--pr->ps_singlecnt == 0)
170 wakeup(&pr->ps_singlecnt);
175 tuagg_add_process(pr, p);
179 while (pr->ps_threadcnt + pr->ps_exitcnt > 1)
180 msleep_nsec(&pr->ps_threads, &pr->ps_mtx, PWAIT,
183 mtx_leave(&pr->ps_mtx);
185 rup = pr->ps_ru;
188 if (pr->ps_ru == NULL) {
189 pr->ps_ru = rup;
192 rup = pr->ps_ru;
197 pr->ps_siglist = 0;
206 if (pr->ps_flags & PS_PROFIL)
207 stopprofclock(pr);
209 sigio_freelist(&pr->ps_sigiolst);
216 timeout_del(&pr->ps_rucheck_to);
218 semexit(pr);
220 killjobc(pr);
227 if (pr->ps_tracevp)
228 ktrcleartrace(pr);
231 unveil_destroy(pr);
233 free(pr->ps_pin.pn_pins, M_PINSYSCALL,
234 pr->ps_pin.pn_npins * sizeof(u_int));
235 free(pr->ps_libcpin.pn_pins, M_PINSYSCALL,
236 pr->ps_libcpin.pn_npins * sizeof(u_int));
242 if (pr->ps_pptr->ps_sigacts->ps_sigflags & SAS_NOCLDWAIT)
243 atomic_setbits_int(&pr->ps_flags, PS_NOZOMBIE);
274 LIST_REMOVE(pr, ps_hash);
275 LIST_REMOVE(pr, ps_list);
277 if ((pr->ps_flags & PS_NOZOMBIE) == 0)
278 LIST_INSERT_HEAD(&zombprocess, pr, ps_list);
285 freepid(pr->ps_pid);
292 qr = LIST_FIRST(&pr->ps_children);
326 while ((qr = LIST_FIRST(&pr->ps_orphans)) != NULL) {
328 KASSERT(qr->ps_opptr == pr);
348 calcru(&pr->ps_tu, &rup->ru_utime, &rup->ru_stime, NULL);
349 ruadd(rup, &pr->ps_cru);
357 mtx_enter(&pr->ps_mtx);
358 if (pr->ps_flags & PS_NOZOMBIE) {
359 struct process *ppr = pr->ps_pptr;
360 process_reparent(pr, initprocess);
363 mtx_leave(&pr->ps_mtx);
368 /* scheduler_wait_hook(pr->ps_mainproc, p); XXX */
369 mtx_enter(&pr->ps_mtx);
370 pr->ps_exitcnt--;
371 if (pr->ps_threadcnt + pr->ps_exitcnt == 1)
372 wakeup(&pr->ps_threads);
373 mtx_leave(&pr->ps_mtx);
472 struct process *pr = p->p_p;
475 uvm_exit(pr);
478 if ((pr->ps_flags & PS_NOZOMBIE) == 0) {
480 atomic_setbits_int(&pr->ps_flags, PS_ZOMBIE);
484 knote_processexit(pr);
486 if (pr->ps_flags & PS_ZOMBIE) {
488 prsignal(pr->ps_pptr, SIGCHLD);
489 wakeup(pr->ps_pptr);
492 process_zap(pr);
504 struct process *pr;
512 LIST_FOREACH(pr, &q->p_p->ps_children, ps_sibling) {
513 if ((pr->ps_flags & PS_NOZOMBIE) ||
514 (idtype == P_PID && id != pr->ps_pid) ||
515 (idtype == P_PGID && id != pr->ps_pgid))
519 if ((options & WEXITED) && (pr->ps_flags & PS_ZOMBIE)) {
520 *retval = pr->ps_pid;
522 info->si_pid = pr->ps_pid;
523 info->si_uid = pr->ps_ucred->cr_uid;
525 if (pr->ps_xsig == 0) {
527 info->si_status = pr->ps_xexit;
528 } else if (WCOREDUMP(pr->ps_xsig)) {
530 info->si_status = _WSTATUS(pr->ps_xsig);
533 info->si_status = _WSTATUS(pr->ps_xsig);
538 *statusp = W_EXITCODE(pr->ps_xexit,
539 pr->ps_xsig);
541 memcpy(rusage, pr->ps_ru, sizeof(*rusage));
543 proc_finish_wait(q, pr);
546 if ((options & WTRAPPED) && (pr->ps_flags & PS_TRACED) &&
547 (pr->ps_flags & PS_WAITED) == 0 &&
548 (pr->ps_flags & PS_TRAPPED)) {
549 if (single_thread_wait(pr, 0))
553 atomic_setbits_int(&pr->ps_flags, PS_WAITED);
555 *retval = pr->ps_pid;
557 info->si_pid = pr->ps_pid;
558 info->si_uid = pr->ps_ucred->cr_uid;
561 info->si_status = pr->ps_xsig;
565 *statusp = W_STOPCODE(pr->ps_xsig);
570 if (((pr->ps_flags & PS_TRACED) || (options & WUNTRACED)) &&
571 (pr->ps_flags & PS_WAITED) == 0 &&
572 (pr->ps_flags & PS_STOPPED) &&
573 (pr->ps_flags & PS_TRAPPED) == 0) {
575 atomic_setbits_int(&pr->ps_flags, PS_WAITED);
577 *retval = pr->ps_pid;
579 info->si_pid = pr->ps_pid;
580 info->si_uid = pr->ps_ucred->cr_uid;
583 info->si_status = pr->ps_xsig;
587 *statusp = W_STOPCODE(pr->ps_xsig);
592 if ((options & WCONTINUED) && (pr->ps_flags & PS_CONTINUED)) {
594 atomic_clearbits_int(&pr->ps_flags,
597 *retval = pr->ps_pid;
599 info->si_pid = pr->ps_pid;
600 info->si_uid = pr->ps_ucred->cr_uid;
626 LIST_FOREACH(pr, &q->p_p->ps_orphans, ps_orphan) {
627 if ((pr->ps_flags & PS_NOZOMBIE) ||
628 (idtype == P_PID && id != pr->ps_pid) ||
629 (idtype == P_PGID && id != pr->ps_pgid))
732 proc_finish_wait(struct proc *waiter, struct process *pr)
741 mtx_enter(&pr->ps_mtx);
742 if (pr->ps_opptr != NULL && (pr->ps_opptr != pr->ps_pptr)) {
743 tr = pr->ps_opptr;
744 pr->ps_opptr = NULL;
745 atomic_clearbits_int(&pr->ps_flags, PS_TRACED);
746 process_reparent(pr, tr);
747 mtx_leave(&pr->ps_mtx);
751 mtx_leave(&pr->ps_mtx);
752 scheduler_wait_hook(waiter, pr->ps_mainproc);
754 ruadd(rup, pr->ps_ru);
755 LIST_REMOVE(pr, ps_list); /* off zombprocess */
756 freepid(pr->ps_pid);
757 process_zap(pr);
765 process_untrace(struct process *pr)
769 KASSERT(pr->ps_flags & PS_TRACED);
770 MUTEX_ASSERT_LOCKED(&pr->ps_mtx);
772 if (pr->ps_opptr != NULL &&
773 (pr->ps_opptr != pr->ps_pptr))
774 ppr = pr->ps_opptr;
777 pr->ps_opptr = NULL;
778 atomic_clearbits_int(&pr->ps_flags, PS_TRACED);
779 process_reparent(pr, ppr ? ppr : initprocess);
783 process_clear_orphan(struct process *pr)
785 if (pr->ps_flags & PS_ORPHAN) {
786 LIST_REMOVE(pr, ps_orphan);
787 atomic_clearbits_int(&pr->ps_flags, PS_ORPHAN);
819 process_zap(struct process *pr)
822 struct proc *p = pr->ps_mainproc;
828 leavepgrp(pr);
829 LIST_REMOVE(pr, ps_sibling);
830 process_clear_orphan(pr);
835 (void)chgproccnt(pr->ps_ucred->cr_ruid, -1);
840 otvp = pr->ps_textvp;
841 pr->ps_textvp = NULL;
845 KASSERT(pr->ps_threadcnt == 0);
846 KASSERT(pr->ps_exitcnt == 1);
847 if (pr->ps_ptstat != NULL)
848 free(pr->ps_ptstat, M_SUBPROC, sizeof(*pr->ps_ptstat));
849 pool_put(&rusage_pool, pr->ps_ru);
850 KASSERT(TAILQ_EMPTY(&pr->ps_threads));
851 sigactsfree(pr->ps_sigacts);
852 lim_free(pr->ps_limit);
853 crfree(pr->ps_ucred);
854 pool_put(&process_pool, pr);