c++ - C ++ getpid()与系统调用(39)?
问题描述
我读到 syscall(39) 返回当前进程 id (pid)
那为什么这 2 个程序输出 2 个不同的数字呢?
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,这是为什么呢?
解决方案
通过他们的号码进行系统调用是不可移植的。
事实上,我们看到 39在 Linux 上是getpid ,但在 macOS 上是getppid(“get parent pid”)。
getpid
在 macOS 上是 20。
这就是为什么您在 macOS 之间getpid()
和syscall(39)
在 macOS 上看到不同结果的原因。
请注意,作为 BSD 内核衍生产品的 macOS 与 Linux 没有任何关系。不可能,因为它是闭源的。
推荐阅读
- java - 动态调用静态方法而不使用反射
- java - 如何在 Spring MVC 应用程序中实现 Spring 安全性?
- javascript - 在javascript(laravel)中获取php数组
- sql - Oracle SQL - 使用 select 为某些行生成聚合行
- sql-server-2008 - 如何在一长串文本字段中搜索特定单词并计算它们 - sqlserver
- java - 重写 clone() 方法时,为什么需要将其声明为 public?
- vue.js - 为什么 html 显示计算属性返回的对象是“未定义的”?
- parameters - SSIS - 通过所有项目更改对变量/参数的引用
- .net - 如何在 net472 上正确打包和使用具有多个运行时的 .NET Standard 库?
- mysql - 如何在其中存储带逗号的整数数据?