λΉλκΈ° μ½λ°±μμ μ€λ₯λ₯Ό μ²λ¦¬νλ λ°©λ²μ΄ μμ΅λκΉ?
const {NodeVM} = require('vm2');
const vm = new NodeVM({
timeout: 10000,
sandbox: {}
});
try {
vm.run(`
setInterval(() => {
console.log("haha")
process.exit() // <--- can't find a way to intercept this!
}, 1000);
process.exit()
`, 'code.js');
} catch(e) {
console.log(e.message);
}
setInterval(() => {
console.log("haha 2")
},1000);
μ 체 μ€ν¬λ¦½νΈ μΆ©λμ λ°©μ§νλ λ°©λ²μ μ°Ύκ³ μμ΅λλ€.
λ€μκ³Ό κ°μ λΉλκΈ° μ€λ₯λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
process.on('uncaughtException', (err) => {
console.log(err);
})
μ΄κ²μ VM λ΄λΆμ μΈλΆ λͺ¨λμμ λͺ¨λ μμΈλ₯Ό ν¬μ°©νλ€λ μ μ μ μνμμμ€.
κ³ λ§μ. λ€, λΆλΆμ μΌλ‘ λμμ΄ λμμ΅λλ€. BTW, 'uncaughtException'μ μ€λ₯κ° VM(λ° μλ§λ κ·Έ μ€ μ΄λ κ²)κ³Ό κ΄λ ¨μ΄ μλμ§ κ΅¬λ³νλ λ°©λ²μ΄ μμ΅λκΉ?
λΆννλ νμ¬λ μλλλ€. μ΄κ²μ ꡬννλ λ°©λ²μ μκ³ μμ§λ§ μκ°μ΄ μ’ κ±Έλ¦΄ κ²μ λλ€.
vm.run()μ domain.run()μΌλ‘ λννκ³ μλνλ κ² κ°μ΅λλ€. λΆμμ©μ΄ μλμ§λ λͺ¨λ₯΄κ² μ§λ§..
let domain = Domain.create();
domain.on('error', (err) => {
console.error('Asynchronous error while executing script.', err.stack);
});
domain.run(() => {
try {
vm.run(script, filename);
} catch (err) {
console.error('Synchronous error while executing script.', err.stack);
}
});
μ΄ λ¬Έμ λ μ΅κ·Ό νλμ΄ μμκΈ° λλ¬Έμ μλμΌλ‘ μ€λλ κ²μΌλ‘ νμλμμ΅λλ€. λ μ΄μ νλμ΄ μμΌλ©΄ νμλ©λλ€. κ·νμ κΈ°μ¬μ κ°μ¬λ립λλ€.
@alsterg λ°©λ²μ΄ ν¨κ³Όκ°
@patriksimek μ΄κ²μ μμ΄
@ImSingee νμΈ λ°©λ²μ λΆννλ λ μ΄μ μλνμ§ μμ΅λλ€.
λΉλκΈ° μ€λ₯λ₯Ό μ²λ¦¬νλ λ°©λ²μ λν μ
λ°μ΄νΈκ° μμ΅λκΉ?
μ΄μ λν μ λ°μ΄νΈκ° μμ΅λκΉ???
κ°μ₯ μ μ©ν λκΈ
vm.run()μ domain.run()μΌλ‘ λννκ³ μλνλ κ² κ°μ΅λλ€. λΆμμ©μ΄ μλμ§λ λͺ¨λ₯΄κ² μ§λ§..