正在获取不带库函数的进程id

Getting process id without library functions?

本文关键字:进程 id 库函数 获取      更新时间:2023-10-16

嗨,我知道如何使用c++使用库函数getpid()来获取pid,有没有可以在不调用库函数的情况下做到这一点?

如果您在使用syscall,则会出现以下情况:

http://man7.org/linux/man-pages/man2/syscall.2.html

#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
int main()
{
    pid_t pid = syscall(SYS_getpid);
    std::cout << pid << 'n';
}

对于我的windows伙伴们。。

#include <cstdio>
#include <windows.h>
int getPID()
{
    #ifndef _MSC_VER
        #ifndef __x86_64__
        asm ("movl %%FS:0x20, %%eax":::);
        #else
        asm ("movq %%GS:0x40, %%rax":::);
        #endif
    #else
        #ifndef _WIN64
        __asm {mov eax, FS:[0x20];};
        #else
        __asm {mov rax, GS[0x40];};
        #endif
    #endif
}
int main()
{
    printf("%dn", getPID());
    printf("%d", GetCurrentProcessId());
}