[英]C++ getpid() vs syscall(39)?
我讀到 syscall(39) 返回當前進程 id (pid)
那為什么這 2 個程序 output 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,這是為什么呢?
這里缺少一個關鍵細節——每次運行程序時,操作系統都會為其分配一個新的 PID。 連續兩次調用同一個程序可能會返回不同的 PID - 所以你所描述的並不是測試getpid()
和syscall(39)
之間差異的好方法。
這是一個更好的程序來比較在同一程序中調用這兩個函數的兩個函數。
#include <sys/syscall.h>
#include <stdio.h>
int main() {
long pid1 = getpid();
long pid2 = syscall(39);
printf("returned getpid()=%ld vs. syscall(39)=%ld\n", pid1, pid2);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.