注:来自博客https://blog.csdn.net/ConstineWhy/article/details/123313378
int
ps(void)
{
static char *states[] = {
[UNUSED] "unused",
[SLEEPING] "sleeping",
[RUNNABLE] "runble",
[RUNNING] "running",
[ZOMBIE] "zombie"
};
char *state;
struct proc *p;
printf("name\\t pid\\t state\\t ppid \\tsize\\n"); //输出信息标识
printf("-------------------------------------------------------\\n");
//循环判断是否遍历完所有进程
for(p = proc; p < &proc[NPROC]; p++)
{
acquire(&p->lock);
if(p->state != UNUSED)
{
state = states[p->state];
//struct proc *pp = p->parent
if(p->pid == 1)
printf("%s\\t %d\\t %s\\t null \\t%d bytes \\n", p->name , p->pid , state , (int)p->sz);
else
printf("%s\\t %d\\t %s\\t %d \\t%d bytes \\n", p->name , p->pid , state , p->parent->pid , (int)p->sz);
}
release(&p->lock);
}
return 22;
}
该代码实现了一个名为 ps
的系统调用功能,主要用于打印系统中所有进程的信息,包括进程的名字、PID(进程ID)、状态、父进程ID(PPID)和内存大小。这个功能类似于 UNIX 或 Linux 系统中的 ps
命令,用于查看当前正在运行的进程状态。