javascript - getpid 和 getppid 函数的 emscripten 代码

标签 javascript v8 spidermonkey asm.js

我的目标是找出运行我的 JavaScript 代码的线程和进程的线程 ID 和进程 ID。我找不到可以提供此功能的函数,因此我使用下面编写的基本 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 是一个不错的数字。

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

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

关于javascript - getpid 和 getppid 函数的 emscripten 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44153400/

相关文章:

javascript - 使用不可序列化参数的 Puppeteer ExposureFunction

windows - 您可以从服务器端 javascript 调用 COM 组件吗?

函数范围导致的 JavaScript 内存泄漏?

c# - Spidermonkey - 从 C# 或 C++ (VIsual Studio 2010) 调用 javascript 函数

javascript - 如何使用 SpiderMonkey 在 WebAssembly 中启用引用?

php - 从输入框中单击后立即删除值 ="Comment?"

javascript - 为什么我不能在 JS 中解析没有引号的 JSON?

javascript - 使用 Promise 时 OAuth 流程不工作

javascript - 如何记录 NodeJS 原生 (V8) 模块?

javascript - 如何在 JavaScript 中继承 C++ 类?