| plan 9 kernel history: overview | file list | diff list |
1991/1112/port/devproc.c (diff list | history)
| 1991/1111/sys/src/9/port/devproc.c:26,35 – 1991/1112/sys/src/9/port/devproc.c:26,35 (short | long | prev | next) | ||
| 1991/1109 | "ctl", {Qctl}, 0, 0000, "mem", {Qmem}, 0, 0000, "note", {Qnote}, 0, 0000, | |
| 1990/11211 |
| |
| 1991/1112 | "notepg", {Qnotepg}, 0, 0000, | |
| 1991/1109 | "proc", {Qproc}, sizeof(Proc), 0000, | |
| 1991/0705 |
| |
| 1991/0807 |
| |
| 1991/1112 | "segment", {Qsegment}, 0, 0444, "status", {Qstatus}, STATSIZE, 0444, | |
| 1991/1109 | "text", {Qtext}, 0, 0000, | |
| 1990/0227 | }; | |
| 1991/1111/sys/src/9/port/devproc.c:72,78 – 1991/1112/sys/src/9/port/devproc.c:72,78 | ||
| 1990/0227 | if(pid == 0) return 0; sprint(buf, "%d", pid); | |
| 1991/1109 |
| |
| 1991/1112 | devdir(c, (Qid){CHDIR|((s+1)<<QSHIFT), pid}, buf, 0, p->user, CHDIR|0555, dp); | |
| 1990/0227 | return 1; } if(s >= NPROC) | |
| 1991/1111/sys/src/9/port/devproc.c:141,151 – 1991/1112/sys/src/9/port/devproc.c:141,149 | ||
| 1991/0705 | Segment *s; | |
| 1990/0227 | Chan *tc; | |
| 1990/11211 |
| |
| 1990/03081 |
| |
| 1990/11211 |
| |
| 1990/03081 |
| |
| 1991/1112 | if(c->qid.path & CHDIR) return devopen(c, omode, 0, 0, procgen); | |
| 1990/0227 | p = proctab(SLOT(c->qid)); | |
| 1990/1110 | pg = p->pgrp; | |
| 1990/11211 | if(p->pid != PID(c->qid)) | |
| 1991/1111/sys/src/9/port/devproc.c:155,160 – 1991/1112/sys/src/9/port/devproc.c:153,160 | ||
| 1990/0227 | switch(QID(c->qid)){ case Qtext: | |
| 1991/1112 | if(omode != OREAD) error(Eperm); | |
| 1991/1110 | tc = proctext(c, p); | |
| 1990/0227 | tc->offset = 0; | |
| 1991/1110 | ||
| 1991/1111/sys/src/9/port/devproc.c:164,169 – 1991/1112/sys/src/9/port/devproc.c:164,171 | ||
| 1990/0227 | case Qnote: | |
| 1991/1110 | case Qmem: | |
| 1991/0705 | case Qsegment: | |
| 1991/1112 | case Qproc: case Qstatus: | |
| 1990/0227 | break; | |
| 1990/1110 | case Qnotepg: | |
| 1991/1111/sys/src/9/port/devproc.c:172,184 – 1991/1112/sys/src/9/port/devproc.c:174,179 | ||
| 1990/11211 | c->pgrpid.path = pg->index+1; c->pgrpid.vers = pg->pgrpid; | |
| 1990/1110 | break; | |
| 1990/0227 |
| |
| 1990/1110 |
| |
| 1990/11211 |
| |
| 1990/0424 |
| |
| 1990/0227 | default: pprint("unknown qid in devopen\n"); | |
| 1990/11211 | error(Egreg); | |
| 1991/1111/sys/src/9/port/devproc.c:187,197 – 1991/1112/sys/src/9/port/devproc.c:182,190 | ||
| 1991/1110 | /* Affix pid to qid */ | |
| 1990/0227 | if(p->state != Dead) | |
| 1990/11211 | c->qid.vers = p->pid; | |
| 1990/03081 |
| |
| 1990/0227 |
| |
| 1991/1112 | return devopen(c, omode, 0, 0, procgen); ; | |
| 1990/0227 | } void | |
| 1991/1111/sys/src/9/port/devproc.c:212,217 – 1991/1112/sys/src/9/port/devproc.c:205,213 | ||
| 1991/1109 | Proc *p; Dir d; | |
| 1991/1112 | if(c->qid.path&CHDIR) error(Eperm); | |
| 1991/1109 | convM2D(db, &d); p = proctab(SLOT(c->qid)); if(p->pid != PID(c->qid)) | |
| 1991/1111/sys/src/9/port/devproc.c:349,354 – 1991/1112/sys/src/9/port/devproc.c:345,352 | ||
| 1991/0705 | return 0; if(offset+n > j) n = j-offset; | |
| 1991/1112 | if(n == 0 && offset == 0) errors("no segments"); | |
| 1991/0705 | memmove(a, &statbuf[offset], n); return n; | |
| 1990/0227 | } | |
| 1991/1111/sys/src/9/port/devproc.c:425,430 – 1991/1112/sys/src/9/port/devproc.c:423,430 | ||
| 1991/1110 | break; | |
| 1990/0227 | case Qnote: | |
| 1991/1112 | if(p->kp) errors("can' t note kproc"); | |
| 1990/0614 | k = kmap(p->upage); up = (User*)VA(k); | |
| 1990/0227 | if(up->p != p){ | |
| 1991/1111/sys/src/9/port/devproc.c:460,466 – 1991/1112/sys/src/9/port/devproc.c:460,468 | ||
| 1991/1110 | Segment *s; s = p->seg[TSEG]; | |
| 1991/1112 | if(s == 0) errors("no text segment"); if(p->state==Dead) | |
| 1991/1110 | error(Eprocdied); lock(s); | |
| 1991/1111/sys/src/9/port/devproc.c:546,593 – 1991/1112/sys/src/9/port/devproc.c:548,589 | ||
| 1991/1110 | void | |
| 1991/1109 | procctlreq(Proc *p, char *va, int n) { | |
| 1991/1110 |
| |
| 1991/1109 |
| |
| 1991/1110 |
| |
| 1991/1109 |
| |
| 1991/1112 | char buf[NAMELEN]; | |
| 1991/1109 | ||
| 1991/1110 |
| |
| 1991/1112 | if(n > NAMELEN) n = NAMELEN; strncpy(buf, va, n); if(strncmp(buf, "exit", 4) == 0) { if(p->state == Broken) ready(p); | |
| 1991/1110 | } | |
| 1991/1112 | else if(strncmp(buf, "stop", 4) == 0) procstopwait(p, Proc_stopme); else if(strncmp(buf, "kill", 4) == 0) { if(p->state == Stopped) ready(p); postnote(p, 0, "sys: killed", NExit); p->procctl = Proc_exitme; } else if(strncmp(buf, "hang", 4) == 0) p->hang = 1; else if(strncmp(buf, "waitstop", 8) == 0) procstopwait(p, 0); else if(strncmp(buf, "startstop", 9) == 0) { | |
| 1991/1110 | if(p->state != Stopped) errors("not stopped"); p->procctl = Proc_traceme; ready(p); procstopwait(p, Proc_traceme); | |
| 1991/1109 |
| |
| 1991/1112 | else if(strncmp(buf, "start", 5) == 0) { | |
| 1991/1109 | if(p->state != Stopped) errors("not stopped"); ready(p); | |
| 1991/1110 | ||
| 1991/1109 |
| |
| 1991/1112 | else error(Ebadctl); | |
| 1991/1109 | } int | |