一、系统调用编写过程

1734838838957.png

注:来自博客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 命令,用于查看当前正在运行的进程状态。

三、结果展示

1734849307549.png