【问题标题】:Getting process id without library functions?在没有库函数的情况下获取进程 ID?
【发布时间】:2014-09-30 03:53:48
【问题描述】:

您好,我知道如何使用库函数 getpid() 使用 c++ 获取 pid 是否可以在不调用库函数的情况下执行此操作?

【问题讨论】:

  • 你期待什么,语言功能?
  • 你为什么不想使用getpid()
  • 您可以直接编写汇编代码,但细节取决于操作系统和架构。
  • 我想使用系统调用,但找不到好的文档
  • 您是否也考虑过在/proc/self/task/ 上执行ls /proc/self/task/ 或readdir(),它应该返回进程的pid。

标签: c++ c process pid


【解决方案1】:

如果您在进行系统调用,那么就是这样:

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';
}

【讨论】:

  • 但是没有理由这样编码,这可能比调用getpid(2)慢,因为vdso(7)
【解决方案2】:

献给我的 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("%d\n", getPID());
    printf("%d", GetCurrentProcessId());
}

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多