用于getpid和getppid函数的emscripten代码

时间:2017-05-24 08:47:36

标签: javascript v8 spidermonkey asm.js

我的目标是找出线程的线程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 调用。谁能告诉我为什么会这样呢?

1 个答案:

答案 0 :(得分:1)

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

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

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