getpid 和 getppid 函数的脚本代码

emscripten code for getpid and getppid functions

我的目标是找出线程的线程 ID 和进程 ID,以及 运行正在我的 javascript 代码中的进程。我找不到可以为我提供此功能的函数,因此我使用下面编写的基本 C 代码,并使用 emscripten 将其转换为 JS 代码。 C代码如下所示:-

#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>

int main(){

    printf("I am %x and process %d called by %d\n", pthread_self(), getpid(), getppid());
    return 0;
}

代码转换没有错误,但我在 运行 的任何浏览器上得到相同的结果 javascript,结果是 我 8 岁,进程 42 调用1。谁能告诉我为什么会这样?

至少在浏览器中,线程和进程ID是没有暴露给JavaScript的,所以没办法找回。显然 emscripten 填充了一些模拟实现,实际上只是 "return 42;" 因为 42 是一个不错的数字。

这不是编程语言的问题 -- 本机二进制文件(从 C 或其他语言编译)可以访问此类系统内部,但浏览器内部的任何内容 运行 JavaScript虚拟机不能。无论您是手动编写 JavaScript 代码,还是从 C(或 Dart 或 Typescript 或其他语言)编译它都没有关系。

当然,可以使 VM 内的程序 运行 可以使用外部信息,例如Date.now() 从操作系统中检索当前时间并将该值传递到 JavaScript 域。如果你想在浏览器中获得 getpid()/getppid() 等价物,你必须通过网络标准化过程。如果您对 node.js 更感兴趣(或者如果您正在实现自己的 V8 嵌入应用程序),您可以开发一个提供此类信息的本机插件。