我正在使用vm2在Node中运行一些沙盒代码。
正在运行的代码将主要是异步的。它是不受信任的代码,不能依赖于以任何方式符合 - 因此我使用#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define N 32
int A[N];
int main(int argc, char *argv[]) {
int size;
int rank;
const int ROOT = 0;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
int count = N / (size - 1);
int *localArray = (int *) malloc(count * sizeof(int));
if (rank == ROOT) {
for (int i = 0; i < N; i++) {
A[i] = rand() % 10;
}
for (int dest = 1; dest < size; ++dest) {
MPI_Send(&A[(dest - 1) * count], count, MPI_INT, dest, tag, MPI_COMM_WORLD);
printf("P0 sent a %d elements to P%d.\n", count, dest);
}
for (int source = 1; source < size; source++) {
MPI_Recv(localArray, count, MPI_INT, source, 2, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
//--------------------------------MERGE THE ALL RESULTS INTO A SORTED ARRAY-------------------------------------
printf("Received results from task %d\n", source);
}
}
else {
MPI_Recv(localArray, count, MPI_INT, ROOT, tag, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
//---------------SORT THE localArray-------------------
MPI_Send(localArray, count, MPI_INT, ROOT, tag, MPI_COMM_WORLD);
}
MPI_Finalize();
return 0;
}
来运行它。
vm2是否有办法结束当前正在执行的任何代码?文档非常有限。例如,如果我有这个代码:
vm2
我有没有办法运行上述内容,并在将来某个时候暂停它,而控制代码不必知道var code = 'setInterval(function(){ console.log("tick"); }, 1000);'
vm.run(code);
的内容,也不需要code
提供任何具体功能?
我找不到code
方法或类似方法。
答案 0 :(得分:4)
不幸的是,没有办法中断VM中运行的代码的执行。 vm2库基于Node的VM模块,该模块不提供任何方法来中断在沙箱中运行的代码。至少在写这篇文章时不会。
您唯一可以限制的是任何同步执行的持续时间。
免责声明:我是作者vm2库。