首页 > 解决方案 > 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,这是为什么呢?

标签: c++linuxmacosunixsystem-calls

解决方案


通过他们的号码进行系统调用是不可移植的。

事实上,我们看到 39在 Linux 上是getpid ,但在 macOS 上是getppid(“get parent pid”)。

getpid在 macOS 上是 20。

这就是为什么您在 macOS 之间getpid()syscall(39)在 macOS 上看到不同结果的原因。

请注意,作为 BSD 内核衍生产品的 macOS 与 Linux 没有任何关系。不可能,因为它是闭源的。


推荐阅读