1) как остановить запуск файла (прервать в случае проблемы);
Чтобы остановить дочерний процесс, вы используете функцию kill (), в вашем случае это будет примерно так: shellScript.kill();
2) как передать текущую команду, что файл выходит из консоли, обратно на сторону клиента;
Вы не предоставляете много контекста в этом отношении, но вы должны использовать обратный вызов для stdout
(см. Пример ниже)
3)что за "дитя";часть синтаксиса и '.on (' часть их синтаксиса делает.
child
в вашем примере - это просто переменная, и, если я угадаю, она естьтолько потому, что код был скопирован и вставлен. Если бы мне пришлось угадывать снова, я скажу, что child
предназначался для использования в качестве ссылки на дочерний процесс, но вместо этого вы выбрали shellScript
.Имейте в виду, что не рекомендуется объявлять переменные в том же месте, где выполняется импорт, это сбивает людей с толку!
Часть .on
- это способ подписаться на события, в этом случае вы подписываетесь настандартный вывод и стандартная ошибка дочернего процесса. Это означает, что всякий раз, когда процесс записывает что-то в stdout / stderr, эта функция вызывается (это не совсем точно, данные буферизуются).
копия вашего кода с некоторыми комментариями, надеюсь, теперь это будет иметь больше смысла.
// import child_process API
var myExecute = require('child_process').exec;
// I think this is a proper use of child
var child = myExecute('node hello.js arg1');
// do something anytime there's data to read
child.stdout.on('data', (data)=>{
console.log('STDOUT from child process: ', data);
// TODO: Send data back to client side
});
// do something when the process writes to stderr
// Note: console.log() writes to stdout, console.error() writes to stderr
child.stderr.on('data', (data)=>{
console.error('error detected: ', data);
// kill child process
child.kill();
// TODO: Send error data to client
});
В качестве личной заметки я скорее импортирую только child_process
, а затем cal child_process.exec
, на всякий случай, если мне нужноАнофэй функция позже.Как это:
var child_process = require('child_proces');
var child = child_process.exec(...)