pgrp
int pgrp, pid;
pgrp = pcurrjob ? pcurrjob->p_jobid : getpid();
pgetty(wanttty, pgrp);
pgetty(int wanttty, int pgrp)
if (setpgid(0, pgrp) == -1) {
(void)tcsetpgrp(FSHTTY, pgrp);
int pgrp;
pgrp = pcurrjob ? pcurrjob->p_jobid : getpid();
pgetty(wanttty, pgrp);
if (Flag(FMONITOR) && ttypgrp_ok && j->pgrp) {
pid_t pgrp; /* process group of job */
shf_fprintf(shf, "%d\n", j->pgrp ? j->pgrp
if (j->pgrp && j->pgrp == job)
if (j->pgrp == 0)
killpg(j->pgrp, SIGHUP);
if (j->pgrp == 0)
killpg(j->pgrp, SIGCONT);
j->pgrp = 0;
if (j->pgrp == 0) { /* First process */
if (j->pgrp == 0) { /* First process */
j->pgrp = p->pid;
setpgid(p->pid, j->pgrp);
tcsetpgrp(tty_fd, j->pgrp);
if (j->pgrp == 0) { /* started when !Flag(FMONITOR) */
(void) killpg(j->pgrp, SIGCONT);
if (killpg(j->pgrp, sig) < 0) {
if (j->pgrp == 0) {
if (ttypgrp_ok && tcsetpgrp(tty_fd, (j->flags & JF_SAVEDTTYPGRP) ? j->saved_ttypgrp : j->pgrp) < 0) {
tty_fd, (int) ((j->flags & JF_SAVEDTTYPGRP) ? j->saved_ttypgrp : j->pgrp), strerror(errno));
if (j->state == PRUNNING && killpg(j->pgrp, SIGCONT) < 0) {
stop_me(int sig, int force, int pgrp, pid_t pid)
if (kill(pgrp ? 0 : pid, sig) == -1) {
int pgrp = 0;
pgrp = 1;
return stop_me(sig, force, pgrp, getpid());
status |= stop_me(sig, force, pgrp, pid);
if (pid > 0 && pgrp)
return -jp->pgrp;
jp->pgrp != 0 ? (long)jp->pgrp : (long)jp->ps->pid);
static int tcsetpgrp(int fd, pid_t pgrp);
jp->pgrp = 0;
pid_t pgrp;
if (ioctl(fd, TIOCGPGRP, (char *)&pgrp) == -1)
return pgrp;
int pgrp = 0;
pgrp = pid;
pgrp = jp->pgrp;
(void)setpgid(pid, pgrp);
jp->pgrp = pgrp; /* 0 if !mflag */
int pgrp;
return ioctl(fd, TIOCSPGRP, (char *)&pgrp);
pgrp = getpid();
pgrp = jp->ps[0].pid;
(void)setpgid(0, pgrp);
if (tcsetpgrp(ttyfd, pgrp) == -1)
if (tcsetpgrp(ttyfd, jp->pgrp) == -1) {
if (jp->pgrp == 0)
if (killpg(jp->pgrp, SIGCONT) != -1)
jp->pgrp != 0 ? (long)jp->pgrp : (long)jp->ps->pid);
jp, JNUM(jp), jp->pgrp, jp->ps[0].pid));
if (jp->pgrp != 0) {
out1fmt("%ld\n", (long)jp->pgrp);
pid_t pgrp; /* process group of this job */
tcsetpgrp(int fd, pid_t pgrp)
s = pgrp;
struct pgrp pgrp;
if (KREAD(kd, (u_long)proc.p_pgrp, &pgrp)) {
eproc.e_sess = pgrp.pg_session;
eproc.e_pgid = pgrp.pg_id;
eproc.e_jobc = pgrp.pg_jobc;
if (KREAD(kd, (u_long)pgrp.pg_session, &sess)) {
pgrp.pg_session);
if (KREAD(kd, (u_long)tty.t_pgrp, &pgrp)) {
eproc.e_tpgid = pgrp.pg_id;
struct pgrp *pgrp;
pgrp = pgrp_find(pgid);
if (pgrp == NULL || pgrp->pg_session != p->p_session) {
tp->t_pgrp = pgrp;
int pgrp;
error = (*ctl)(fp, TIOCGPGRP, &pgrp);
if (error == 0 && pgrp == 0)
error = copyout((void *)&pgrp, SCARG(uap, data), sizeof(pgrp));
int pgrp;
error = (*ctl)(fp, TIOCGPGRP, &pgrp);
if ((error == EIO || (error == 0 && pgrp == 0)) &&
error = copyout((void *)&pgrp, SCARG(uap, data), sizeof(pgrp));
int pgrp;
error = sunos32_do_ioctl(SCARG(&bsd_ua, fd), TIOCGPGRP, &pgrp,
return copyout(&pgrp, SCARG_P32(uap, data), sizeof(pgrp));
static struct pgrp pgrp;
db_read_bytes((db_addr_t)p.p_pgrp, sizeof(pgrp),
(char *)&pgrp);
p.p_pptr != NULL ? p.p_pptr->p_pid : -1, pgrp.pg_id,
struct pgrp *pgrp;
pgrp = pgrp_find(-pgid);
if (pgrp != NULL) {
kpgsignal(pgrp, &ksi, fdescdata, 0);
pid_t pgrp = attrs->sa_pgroup;
if (pgrp == 0)
pgrp = mypid;
error = proc_enterpgrp(parent, mypid, pgrp, false);
struct pgrp *pgrp;
pgrp = tp->t_pgrp;
if (pgrp != NULL) {
pgsignal(pgrp, SIGHUP, 1);
struct pgrp *pg;
if (pgrp)
pid = pgrp->pg_id;
n_pt[pid & pt_size].pt_pgrp = pgrp;
struct pgrp *new_pgrp, *pgrp;
pgrp = pid_table[pgid & pid_tbl_mask].pt_pgrp;
if (pgrp != NULL && pgrp->pg_id != pgid)
if (pgrp != NULL && pgrp->pg_session != p->p_session)
if (sess == NULL && p->p_pgrp == pgrp) {
if (pgrp == NULL && pgid != pid)
if (sess != NULL && pgrp != NULL)
if (pgrp == NULL && new_pgrp == NULL)
if (pgrp != NULL && LIST_EMPTY(&pgrp->pg_members))
if (pgrp == p->p_pgrp)
if (pgrp == NULL) {
pgrp = new_pgrp;
pgrp->pg_session = sess;
pgrp->pg_id = pgid;
LIST_INIT(&pgrp->pg_members);
pid_table[pgid & pid_tbl_mask].pt_pgrp = pgrp;
pgrp->pg_jobc = 0;
fixjobc(p, pgrp, 1);
p->p_pgrp = pgrp;
LIST_INSERT_HEAD(&pgrp->pg_members, p, p_pglist);
struct pgrp *pgrp;
pgrp = p->p_pgrp;
if (LIST_EMPTY(&pgrp->pg_members)) {
struct pgrp *pt_pgrp;
pg_delete(pgrp->pg_id);
static struct pgrp *
struct pgrp *pgrp;
pgrp = pt->pt_pgrp;
KASSERT(pgrp != NULL);
KASSERT(pgrp->pg_id == pg_id);
KASSERT(LIST_EMPTY(&pgrp->pg_members));
return pgrp;
struct pgrp *pg;
kmem_free(pg, sizeof(struct pgrp));
fixjobc(struct proc *p, struct pgrp *pgrp, int entering)
struct pgrp *hispgrp;
struct session *mysession = pgrp->pg_session;
if (hispgrp != pgrp && hispgrp->pg_session == mysession) {
pgrp->pg_jobc++;
if (--pgrp->pg_jobc == 0)
orphanpg(pgrp);
if (hispgrp != pgrp && hispgrp->pg_session == mysession &&
orphanpg(struct pgrp *pg)
struct pgrp *pgrp;
if ((pgrp = pt->pt_pgrp)) {
pgrp->pg_session, pgrp->pg_session->s_sid,
pgrp->pg_session->s_count,
pgrp->pg_session->s_login);
pgrp, pgrp->pg_id, pgrp->pg_jobc,
LIST_FIRST(&pgrp->pg_members));
LIST_FOREACH(p, &pgrp->pg_members, p_pglist) {
struct pgrp pgrp0 = {
static struct pgrp * pg_remove(pid_t);
static void orphanpg(struct pgrp *);
struct pgrp *pg;
struct pgrp *pg;
kmem_free(pg, sizeof(struct pgrp));
struct pgrp *pgrp;
pgrp = p1->p_pgrp;
pgrp = pgrp_find(pg_id);
if (pgrp == NULL) {
session = pgrp->pg_session;
struct pgrp *
struct pgrp *pg;
struct pgrp *pgrp;
pgrp = pid_table[i].pt_pgrp;
struct pgrp *pg;
struct pgrp *pg;
struct pgrp *pgrp;
pgrp = cp->p_pgrp;
pgrp = pgrp_find(pgid);
if (pgrp == NULL)
LIST_FOREACH(p, &pgrp->pg_members, p_pglist) {
pgsignal(struct pgrp *pgrp, int sig, int checkctty)
kpgsignal(pgrp, &ksi, NULL, checkctty);
kpgsignal(struct pgrp *pgrp, ksiginfo_t *ksi, void *data, int checkctty)
KASSERT(pgrp != NULL);
LIST_FOREACH(p, &pgrp->pg_members, p_pglist)
struct pgrp *pgrp;
pgrp = pgrp_find(-pgid);
if (pgrp == NULL) {
pgrp = p1->p_pgrp;
if (pgrp->pg_session != p->p_session) {
tp->t_pgrp = pgrp;
struct pgrp *pgrp;
pgrp = pgrp_find(pgid);
if (pgrp == NULL || pgrp->pg_session != p->p_session) {
tp->t_pgrp = pgrp;
struct pgrp *pgrp;
pgrp = tp->t_pgrp;
if (pgrp != NULL)
pgsignal(pgrp, sig, 1);
if (pgrp != NULL)
pgsignal(pgrp, sig, sess != NULL);
pgsignal(struct pgrp *pgrp, int sig, int checktty)
pgrp_apply(pgrp, sig, rumpsig);
kpgsignal(struct pgrp *pgrp, ksiginfo_t *ksi, void *data, int checkctty)
pgrp_apply(pgrp, ksi->ksi_signo, rumpsig);
pgrp_apply(struct pgrp *pgrp, int signo, void (*apply)(struct proc *p, int))
LIST_FOREACH(p, &pgrp->pg_members, p_pglist) {
struct pgrp *p_pgrp; /* l: Pointer to process group */
struct pgrp * pgrp_find(pid_t); /* Find process group by ID */
void fixjobc(struct proc *, struct pgrp *, int);
void pgsignal(struct pgrp *, int, int);
void kpgsignal(struct pgrp *, struct ksiginfo *, void *, int);
struct pgrp *t_pgrp; /* Foreground process group. */
struct pgrp;
static pid_t pgrp = -1;
if (pgrp == -1)
pgrp = getpgrp();
return (tcgetpgrp(fileno(ttyout)) == pgrp);