【问题标题】:emscripten code for getpid and getppid functionsgetpid 和 getppid 函数的 emscripten 代码
【发布时间】:2017-05-24 08:47:36
【问题描述】:

我的目标是找出线程的线程 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;
}

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

【问题讨论】:

    标签: javascript v8 spidermonkey asm.js


    【解决方案1】:

    至少在浏览器中,线程和进程 ID 不会暴露给 JavaScript,因此无法检索它们。显然 emscripten 填充了一些基本上只是“返回 42”的模拟实现;因为 42 是个好数字。

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 2011-09-28
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2023-01-25
      • 2018-04-07
      相关资源
      最近更新 更多