2017-05-24 9 views
0

자바 스크립트 코드를 실행하는 스레드 및 프로세스 ID와 스레드 ID를 찾으려는 나의 목표. 나에게 이것을 제공 할 수있는 함수를 찾을 수 없으므로 아래에 쓰여진 기본 C 코드를 사용하고 emscripten을 사용하여 JS 코드로 변환한다. 아래 그림과 같이 C 코드는 다음과 같습니다 -getscid 및 getppid 함수에 대한 emscripten 코드

#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; 
} 

코드 transpiles를 오류없이하지만 난 실행하는 모든 브라우저에서 자바 스크립트에 대해 동일한 결과를 얻을, 결과는 인 나는 오전 8시 (42)에 의해 호출 처리 1. 아무도 왜이 일이 일어 났는지 말해 줄 수 있습니까?

답변

1

적어도 브라우저에서는 스레드와 프로세스 ID가 JavaScript에 노출되지 않으므로이를 검색 할 수 없습니다. 외관상으로는 emscripten은 본질적으로 단지 "return 42;" 42가 좋은 숫자이기 때문입니다.

프로그래밍 언어의 문제가 아닙니다. 기본 바이너리 (C 또는 다른 언어로 컴파일 됨)이 시스템 내부에 액세스 할 수 있지만 브라우저의 JavaScript VM에서 실행되는 것은 불가능합니다. 자바 스크립트 코드를 직접 작성하거나 C (또는 Dart 또는 Typescript 등)로 컴파일하는 것은 중요하지 않습니다.

물론 외부 정보를 VM 내부에서 실행되는 프로그램에서 사용할 수 있습니다. Date.now()은 운영 체제에서 현재 시간을 검색하고이 값을 JavaScript 랜드에 전달합니다. 브라우저에 getpid()/getppid() 등가물을 가져 가고 싶다면 웹 표준화 과정을 거쳐야합니다. node.js에 관심이 있다면 (또는 자신의 V8 임베디드 애플리케이션을 구현하는 경우) 이러한 정보를 제공하는 기본 애드온을 개발할 수 있습니다.