【问题标题】:how to get a Process ID in c, getpid() is not implemented [closed]如何在c中获取进程ID,未实现getpid()[关闭]
【发布时间】:2015-09-08 21:43:23
【问题描述】:

在未实现 getpid() 方法的情况下,如何在 C 中获取进程 ID?我有一个没有任何东西的操作系统,没有库,什么都没有,我必须开发所有东西。

【问题讨论】:

  • 不太了解,但您可以先查看getpid() 的现有实现。
  • 你有个进程吗?你需要getpid 做什么?哪些系统调用可用
  • 为什么不能安装库?您的操作系统在哪种设备上运行?是 linux 发行版还是 RTOS?
  • 在不知道您的流程的实现以及它们是如何创建的情况下,很难给出一个准确的解决方案。
  • 那么你应该看看这个自定义操作系统内核的源代码,看看它是否保留了进程 ID,看看它是否公开了一个系统调用来获取它们,如果没有,这将取决于你添加这些功能。

标签: c++ c process operating-system pid


【解决方案1】:

这里没有人能够为通常不可用的操作系统给出确切的答案(除非他们现在或曾经与您在同一门课程中)

一般的答案是您需要引入一个新的系统调用(如果操作系统真的很简单,这将只是一个函数调用,就像其他操作系统服务一样 - 在不了解操作系统本身的情况下,这是一个无法做到的细节具体回答),它检查当前进程是什么,并为该进程 ID 返回某种形式的唯一编号。可以是指向进程控制块的指针[如在 Windows 中],堆栈指针 [如果操作系统没有虚拟内存,因此堆栈在同一个位置],或者当前进程在进程列表中的条目数。

【讨论】:

  • @JackJohns 您可以将代码上传到pastebin unlisted。
  • 我不是你的个人支持。 Stackoverflow 的想法是你在那里提问,而不是你找到可以在个人层面上帮助你的人——这不是我想做的,我认为这里的大多数人都同意。
  • 好吧,如果信息暴露在伪文件系统中,在某些系统上你可以不用系统调用来完成。例如,在 linux 上,您可以查看 /proc/self/status。 getpid() 的简单实现就是open(/proc/sel/status); read(); parse();,不需要系统调用。
  • @SeverinPappadeux:假设一个文件系统(以及打开文件、读取文件等的系统调用)——这些不太可能在没有系统调用 get 的小型操作系统中实现进程标识。请注意,这是一个学习操作系统如何工作的人的任务,而不是关于“我的 Linux 机器中进程的进程 ID 是什么”。
  • @MatsPetersson 好吧,像 Plan9 和 Inferno 这样的小型系统使用了这种方法 - 提供伪文件系统并用一个 read() 替换一堆系统调用。并不是说我反对学习或 DIY 开发。只是指出可能的替代方案
猜你喜欢
  • 1970-01-01
  • 2012-12-22
  • 2013-02-28
  • 2014-11-22
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
相关资源
最近更新 更多