gpt4 book ai didi

javascript - getpid 和 getppid 函数的 emscripten 代码

转载 作者:行者123 更新时间:2023-12-03 04:15:33 25 4
gpt4 key购买 nike

我的目标是找出运行我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com