Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c中获取进程ID,getpid()未实现_C++_C_Process_Operating System_Pid - Fatal编程技术网

C++ 如何在c中获取进程ID,getpid()未实现

C++ 如何在c中获取进程ID,getpid()未实现,c++,c,process,operating-system,pid,C++,C,Process,Operating System,Pid,在未实现getpid方法的情况下,如何在C中获取进程ID?我有一个没有任何东西的操作系统,没有库,什么都没有,我必须全部开发。这里没有人能够给出一个操作系统的确切答案,除非它们与您处于或曾经处于相同的过程中,否则通常无法使用 一般的回答是,如果操作系统非常简单,你需要引入一个新的系统调用,这将只是一个函数调用,就像其他操作系统服务一样-在不了解操作系统本身的情况下,这是一个无法具体回答的细节,它检查当前的过程是什么,并为该进程ID返回某种形式的唯一编号。可能是指向进程控制块的指针[在Window

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

这里没有人能够给出一个操作系统的确切答案,除非它们与您处于或曾经处于相同的过程中,否则通常无法使用


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

我不太清楚,但您可以从查看现有的getpid实现开始。您甚至有进程吗?你需要getpid做什么?有哪些系统调用可用?为什么不能安装库?您的操作系统在哪种设备上运行?是linux发行版还是RTOS?如果不知道进程的实现以及它们是如何创建的,那么要给出一个精确的解决方案就有点困难了。那么你应该看看这个定制操作系统内核的源代码,看看它是否保留进程ID,看它是否公开一个系统调用来获取它们,如果不是,这将取决于您是否在中添加这些功能。@JackJohns您可以将代码上载到未列出。我不是您的个人支持。Stackoverflow的想法是,你可以在那里提问,而不是找人在个人层面上帮助你——这不是我想做的,我想这里的大多数人都同意。在一些系统上,如果信息暴露在伪文件系统中,你可以不用系统调用。例如,在linux上,您可以查看/proc/self/status。所以getpid的简单实现是open/proc/sel/status;阅读作语法分析不需要syscall。@SeverinAppadeux:假设文件系统和系统调用用于打开文件、读取文件等-这些不太可能在没有系统调用get process ID的小型操作系统中实现。请注意,这是一项学习操作系统如何工作的任务,不是关于我的Linux机器中进程的进程ID是什么。@Matstpeterson嗯,像Plan9和Inferno这样的小系统使用了这种方法——提供伪文件系统,并用一次读取来替换一堆系统调用。并不是说我反对学习或DIY开发。只是指出可能的替代方案