【发布时间】:2015-12-02 15:45:34
【问题描述】:
这是使用 Minix 在 C 中打印进程 ID 和父进程 ID 的程序。我正在尝试编译此代码下方的测试代码以返回 ID,但它没有编译。任何帮助将不胜感激。
//Program to print its Process ID, Parent Process ID
#include <stdio.h>
#include "pm.h" // for various global variables
#include "mproc.h" // for process table mproc
int do_printppids(void)
{
int idx = m_in.m1_i1;
int n = m_in.m1_i2;
while(n > 0 )
{
int pid = mproc[idx].mp_pid;
if(pid)
{
int parent = mproc[mproc[idx].mp_parent].mp_pid;
printf("proc: %sn", mproc[idx].mp_name);
printf("Pid: %d, PPid %dn", pid, parent);
n++;
}
else
{
n = 0;
}
idx++;
}
return 1;
}
这是我尝试返回进程 ID 和父进程 ID 的测试类,但它没有在 Minix 中编译。
#include <lib.h> // provides _syscall and message
#include <stdio.h>
#include <stdlib.h> // provides atoi
int main(void) {
message m; // Minix uses message to pass parameters to a system call
m_in.m1_i1 = 0;
m_in.m1_i2 = 10;
_syscall(PM_PROC_NR, PRINTPPIDS, &m);
}
【问题讨论】:
-
你得到什么错误信息?
-
test.c:13:26: 错误:使用未声明的标识符 'PRINTPPIDS' _syscall(PM_PROC_NR, PRINTPPIDS, &m);
-
您必须在
main()函数中可以看到的某个地方定义PRINTPPIDS。 -
PRINTPPIDS在callnr.h文件中定义,调用号为 70 -
为什么要付出这么多额外的努力?只需使用:
pid_t parentPid = getppid();当然代码需要#include <sys/types.h>和#include <unistd.h>
标签: c system system-calls minix