|
|
@ -1,17 +1,37 @@ |
|
|
|
const { spawn } = require('child_process') |
|
|
|
let pidMap = {} |
|
|
|
|
|
|
|
function start(command, args) { |
|
|
|
/** |
|
|
|
* options: { onSuccess: null | function, onError: null | function, onClose: null | function } |
|
|
|
*/ |
|
|
|
function start(command, args, options = {}) { |
|
|
|
const childProgress = spawn(command, args) |
|
|
|
pidMap[childProgress.pid] = childProgress |
|
|
|
|
|
|
|
childProgress.stdout.on('data' data => { |
|
|
|
options.onSuccess && options.onSuccess(data) |
|
|
|
}) |
|
|
|
|
|
|
|
childProgress.stderr.on('data', data => { |
|
|
|
options.onError && options.onError(data) |
|
|
|
}) |
|
|
|
|
|
|
|
childProgress.on('close', code => { |
|
|
|
options.onClose && options.onClose(code) |
|
|
|
}) |
|
|
|
|
|
|
|
return childProgress.pid |
|
|
|
} |
|
|
|
|
|
|
|
function kill(pid) { |
|
|
|
const childProgress = pidMap[pid] |
|
|
|
if (!childProgress || childProgress.killed) return; |
|
|
|
// TODO 需要测试是否能真正杀掉
|
|
|
|
return childProgress.kill() |
|
|
|
let status = false |
|
|
|
if (childProgress && !childProgress.killed) { |
|
|
|
status = childProgress.kill() |
|
|
|
} |
|
|
|
childProgress = null |
|
|
|
delete pidMap[pid] |
|
|
|
return status |
|
|
|
} |
|
|
|
|
|
|
|
module.exports = { |
|
|
|