|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "ps.h" ! 3: ! 4: inita() ! 5: { ! 6: if (drumf == NULL) ! 7: drumf = "/dev/drum"; ! 8: if (memf == NULL) ! 9: memf = "/dev/kmem"; ! 10: if ((drum = open(drumf, 0)) < 0) { ! 11: perror(drumf); ! 12: exit(1); ! 13: } ! 14: if ((memory = open(memf, 0)) < 0) { ! 15: perror(memf); ! 16: exit(1); ! 17: } ! 18: } ! 19: ! 20: getproca(s, pp) ! 21: char *s; register struct proc *pp; ! 22: { ! 23: register int fd; ! 24: char sstr[32]; ! 25: extern char stack[]; ! 26: ! 27: if((fd = open(strcat(strcpy(sstr, "/proc/"), s), 0)) == -1) ! 28: return -1; ! 29: if(ioctl(fd, PIOCGETPR, pp) < 0) { ! 30: close(fd); ! 31: fprintf(stderr, "%s %s: /proc ioctl error\n", progname, s); ! 32: return -1; ! 33: } ! 34: return fd; ! 35: } ! 36: ! 37: char * ! 38: getuareaa(fd, pp, up) ! 39: register struct proc *pp; register struct user *up; ! 40: { ! 41: if (up->u_procp) ! 42: return 0; ! 43: if (pp->p_stat == SZOMB) { ! 44: memset((char *)up, 0, sizeof(*up)); ! 45: return (0); ! 46: } ! 47: if (pp->p_flag & SLOAD) { ! 48: register ntry = 4; ! 49: do ! 50: if (memrd(fd, (char *)up, sizeof(*up), UBASE) == sizeof(*up)) ! 51: return 0; ! 52: while (errno == EBUSY && --ntry > 0); ! 53: close(fd); ! 54: return "/proc read error"; ! 55: } ! 56: if (memrd(drum, (char *)up, sizeof(*up), ctob(pp->p_swaddr)) == sizeof(*up)) ! 57: return 0; ! 58: close(fd); ! 59: return "drum read error"; ! 60: } ! 61: ! 62: getstacka(f, pp, up, stack) ! 63: struct proc *pp; ! 64: struct user *up; ! 65: char *stack; ! 66: { ! 67: int nstack; ! 68: int nspte; ! 69: int szpt; ! 70: register int i; ! 71: struct pte pte[NPTEPG]; ! 72: ! 73: nstack = ctob(up->u_ssize); ! 74: if (nstack <= 0) ! 75: return (0); ! 76: if (nstack > NSTACK) ! 77: nstack = NSTACK; ! 78: if (pp->p_flag & SLOAD) { ! 79: lseek(f, UBASE-nstack, 0); ! 80: return (read(f, stack, nstack)); ! 81: } else { ! 82: nspte = btoc(nstack); ! 83: szpt = clrnd(ctopt(UPAGES+pp->p_tsize+pp->p_dsize+pp->p_ssize)); ! 84: lseek(drum, ctob(pp->p_swaddr+UPAGES+szpt-1), 0); ! 85: if (read(drum, (char *)pte, sizeof(pte)) != sizeof(pte)) ! 86: return (0); ! 87: for (i = nspte-1; i >= 0; stack += NBPG, --i) ! 88: rdpage(up, i, &pte[NPTEPG-UPAGES-1-i], stack); ! 89: return (nstack); ! 90: } ! 91: } ! 92: ! 93: List * ! 94: getprlista() ! 95: { ! 96: register List *prlist; ! 97: ! 98: if ((prlist = getdir("/proc", (List *)0)) == 0) ! 99: error("can't getdir /proc"); ! 100: return prlist; ! 101: } ! 102: ! 103: kreada(addr, buf, size) ! 104: long addr; ! 105: char *buf; ! 106: int size; ! 107: { ! 108: ! 109: return (memrd(memory, buf, size, addr) == size); ! 110: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.