/ / emscripten kód pre funkcie getpid a getppid - javascript, v8, spidermonkey, asm.js

emscripten kód pre funkcie getpid a getppid - javascript, v8, spidermonkey, asm.js

Mojím cieľom je zistiť ID a postup vláknaid podprocesu a proces, ktorý spúšťa môj kód javascript. Nemohol som nájsť žiadne funkcie, ktoré by mi to mohli poskytnúť, takže používam základný C kód, ako je napísané nižšie, a transponujem ho pomocou emscripten do JS kódu. C kód je uvedený nižšie: -

#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>

int main(){

printf("I am %x and process %d called by %dn", pthread_self(), getpid(), getppid());
return 0;
}

Kód sa transpiluje bez chyby, ale rovnaký výsledok získam pre javascript v každom prehliadači, ktorý spustím, výsledkom bude Je mi 8 a proces 42 sa volá 1, Môže mi niekto, prosím, povedať, prečo sa to deje?

odpovede:

1 pre odpoveď č. 1

Aspoň v prehliadači, vlákne a ID procesunie sú vystavené JavaScriptu, takže neexistuje spôsob, ako ich získať. Pravdepodobne sa vypĺňa nejaká falošná implementácia, ktorá v podstate len „vracia 42;“ pretože 42 je pekné číslo.

Nejde o programovací jazyk - domorodé binárne súbory (zostavené z jazyka C alebo iných jazykov)takéto vnútorné funkcie systému, ale čokoľvek, čo je spustené vo vnútri JavaScriptu VM v prehliadači, nemôže. Nezáleží na tom, či budete kód JavaScript písať ručne, alebo ho skompilovať z jazyka C (alebo šípky alebo strojopisu alebo čokoľvek).

Samozrejme, je možné sprístupniť externé informácie programom bežiacim vo VM, rovnako ako napr. Date.now() načíta aktuálny čas z operačného systému a odovzdá hodnotu do jazyka JavaScript. Ak ste sa chceli dostať getpid()/getppid() ekvivalentov do prehliadačov, museli by ste ísťprostredníctvom procesu štandardizácie webu. Ak sa viac zaujímate o adresu node.js (alebo ak implementujete svoju vlastnú aplikáciu na vkladanie jazyka V8), môžete vyvinúť natívny doplnok, ktorý takéto informácie poskytuje.