【发布时间】:2021-07-29 22:30:20
【问题描述】:
我读到 syscall(39) 返回当前进程 id (pid)
那为什么这两个程序会输出两个不同的数字呢?
int main() {
long r = syscall(39);
printf("returned %ld\n", r);
return 0;
}
和:
int main() {
long r = getpid();
printf("returned %ld\n", r);
return 0;
}
我在 clion 中运行我的程序,当我更改第一行时,我得到了不同的结果,这真的很奇怪。
在我得到的答案中运行代码(在 macos 中):
returned getpid()=9390 vs. syscall(39)=8340
这真的很奇怪。
在 ubuntu 中我得到了相同的 pid,这是为什么呢?
【问题讨论】:
-
你从每个观察到的具体结果是什么?
-
这些运行在什么环境下?
-
您为什么希望它们在每次调用时返回相同的数字?同一程序的不同运行通常会得到不同的 PID。
-
进程id是在程序启动时由操作系统分配的。同一个程序的不同运行可以有不同的进程ID,不同程序的不同运行也可以。
-
为什么不在同一个程序/运行中打印两者...?!?
标签: c++ linux macos unix system-calls