52 lines
1 KiB
JavaScript
52 lines
1 KiB
JavaScript
|
var signal = process.argv[2]
|
||
|
var gens = +process.argv[3] || 0
|
||
|
|
||
|
if (!signal || !isNaN(signal)) {
|
||
|
throw new Error('signal not provided')
|
||
|
}
|
||
|
|
||
|
var spawn = require('child_process').spawn
|
||
|
var file = require.resolve('./awaiter.js')
|
||
|
console.error(process.pid, signal, gens)
|
||
|
|
||
|
if (gens > 0) {
|
||
|
file = __filename
|
||
|
}
|
||
|
|
||
|
var child = spawn(process.execPath, [file, signal, gens - 1], {
|
||
|
stdio: [ 0, 'pipe', 'pipe' ]
|
||
|
})
|
||
|
|
||
|
if (!gens) {
|
||
|
child.stderr.on('data', function () {
|
||
|
child.kill(signal)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
var result = ''
|
||
|
child.stdout.on('data', function (c) {
|
||
|
result += c
|
||
|
})
|
||
|
|
||
|
child.on('close', function (code, sig) {
|
||
|
try {
|
||
|
result = JSON.parse(result)
|
||
|
} catch (er) {
|
||
|
console.log('%j', {
|
||
|
error: 'failed to parse json\n' + er.message,
|
||
|
result: result,
|
||
|
pid: process.pid,
|
||
|
child: child.pid,
|
||
|
gens: gens,
|
||
|
expect: [ null, signal ],
|
||
|
actual: [ code, sig ]
|
||
|
})
|
||
|
return
|
||
|
}
|
||
|
if (result.wanted[1] === true) {
|
||
|
sig = !!sig
|
||
|
}
|
||
|
result.external = result.external || [ code, sig ]
|
||
|
console.log('%j', result)
|
||
|
})
|