Для запуска и остановки приложения с помощью команд npm и child_process, вы можете использовать функцию exec. Например, для запуска приложения вы можете использовать следующий код:
```javascript
const { exec } = require('child_process');
exec('npm start', (error, stdout, stderr) => {
if (error) {
console.error(`Ошибка выполнения команды: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
```
Для остановки приложения можно использовать метод `kill` для завершения дочернего процесса:
```javascript
const { exec } = require('child_process');
// Запуск приложения
const childProcess = exec('npm start', (error, stdout, stderr) => {
if (error) {
console.error(`Ошибка выполнения команды: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
// Остановка приложения
childProcess.kill();
```
Чтобы получать данные от приложения, вы можете использовать событие 'data', которое срабатывает при поступлении данных из stdout или stderr. Например:
```javascript
const { spawn } = require('child_process');
const childProcess = spawn('npm', ['start']);
childProcess.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
childProcess.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
```
Для передачи данных между процессами, помимо вывода в консоль, можно использовать стандартные потоки ввода и вывода (stdin и stdout). Например, вы можете отправить данные в дочерний процесс через stdin следующим образом:
```javascript
const { spawn } = require('child_process');
const childProcess = spawn('node', ['child.js']);
childProcess.stdin.write('Данные для дочернего процесса');
childProcess.stdin.end();
```
А в дочернем процессе можно получить эти данные следующим образом:
```javascript
process.stdin.on('data', (data) => {
console.log(`Получены данные: ${data}`);
});
```
Вы также можете передавать данные через другие каналы связи, такие как сокеты или веб-сервисы, используя более подходящие средства для конкретной ситуации.