четверг, 27 июня 2019 г.

Node.js - Process and Child Process

parent-process-spawn.js

var child_process = require('child_process');

// spawn() является универсальным методом. exec(), execFile(), fork() наследуют от него.
// {shell: true} - говорит о том, стоит ли выполнять команду терминале командной строки или файл можно запустить самостоятельно вне терминала.

var childProcess = child_process.spawn('dir', ['/b', '/o:-n'], {shell: true}); // Поключается к stdin, stdout, stderr созданного дочернего процесса и получает данные от него.

childProcess.stdout.on('data', function (data) {
    console.log('STDOUT from child process: ' + data);
});

childProcess.stderr.on('data', function (data) {
    console.log('STDERR from child process: ' + data);
});

childProcess.on('error', function (error) {
    console.log('Child process error.');
    console.log(error);
});

childProcess.on('close', function (code, signal) {
    console.log('Child process exited with code ' + code + ' and signal ' + signal);
});
/*
childProcess.ref();
childProcess.unref();
*/

parent-process-exec.js

var child_process = require('child_process');

// exec() открывет терминал командной строки и выполняет в нем переданную команду.

var childProcess = child_process.exec('dir /b /o:-n'); // Поключается к stdin, stdout, stderr созданного дочернего процесса и получает данные от него.

childProcess.stdout.on('data', function (data) {
    console.log('STDOUT from child process: ' + data);
});

childProcess.stderr.on('data', function (data) {
    console.log('STDERR from child process: ' + data);
});

childProcess.on('error', function (error) {
    console.log('Child process error.');
    console.log(error);
});

childProcess.on('close', function (code, signal) {
    console.log('Child process exited with code ' + code + ' and signal ' + signal);
});
/*
childProcess.ref();
childProcess.unref();
*/

parent-process-execFile.js

var child_process = require('child_process');

// execFile() полностью аналогичен exec() - открывет терминал командной строки и выполняет в нем переданную команду, но в отлчии от exec() не показывает сам терминал на экране.
// В Windows файлы .bat и .cmd не могут работать вне терминала, поэтому execFile() не сможет их запустить.

var childProcess = child_process.execFile('node.exe', ['--version']); // Поключается к stdin, stdout, stderr созданного дочернего процесса и получает данные от него.

childProcess.stdout.on('data', function (data) {
    console.log('STDOUT from child process: ' + data);
});

childProcess.stderr.on('data', function (data) {
    console.log('STDERR from child process: ' + data);
});

childProcess.on('error', function (error) {
    console.log('Child process error.');
    console.log(error);
});

childProcess.on('close', function (code, signal) {
    console.log('Child process exited with code ' + code + ' and signal ' + signal);
});
/*
childProcess.ref();
childProcess.unref();
*/

parent-process-fork.js

var child_process = require('child_process');

// fork() - запускает файл JavaScript-файл, находящийся по переданному адресу в отдельно мпроцессе Node.js и соединяет его с родительским процессом, который его создал, для обеспечения возможности обмена данными между ними с помощью сообщений.

var childProcess = child_process.fork('./child-process.js', ['name']);

childProcess.on('error', function (error) {
    console.log('Child process error.');
    console.log(error);
});

childProcess.on('close', function (code, signal) {
    console.log('Child process exited with code ' + code + ' and signal ' + signal);
});

childProcess.on('disconnect', function () {
    console.log('Child process disconneted.');
});

childProcess.on('message', function (message) {
    console.log('Message from child process: ' + message.text);
});

if (childProcess.connected) {
    childProcess.send({text: 'Parent process message.'});
}
/*
childProcess.ref();
childProcess.unref();
*/

child-process.js

process.on('message', function (message) {
    console.log('Message from parent process: ' + message.text);
});

process.on('disconnect', function () {
    console.log('Process disconneted.');
});

if (process.connected) {
    process.send({text: 'Child process message.'});
    setTimeout (function () {
        process.disconnect();
    }, 1000);
}

Комментариев нет:

Отправить комментарий