Spec-Zone.ru › Deno 2

child_process

Модуль node:child_process позволяет создавать дочерние процессы способом, похожим, но не идентичным popen(3). Эта возможность в основном обеспечивается функцией spawn:

import { spawn } from 'node:child_process';
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

По умолчанию между родительским процессом Node.js и созданным дочерним процессом устанавливаются каналы для stdin, stdout и stderr. Пропускная способность этих каналов ограничена и зависит от платформы. Если дочерний процесс записывает в stdout больше данных, чем допускает это ограничение, а вывод не считывается, дочерний процесс блокируется в ожидании, пока буфер канала не освободит место для новых данных. Это аналогично поведению каналов в оболочке. Используйте параметр { stdio: 'ignore' }, если вывод не будет считываться.

Поиск команды выполняется с использованием переменной окружения options.env.PATH, если env находится в объекте options. В противном случае используется process.env.PATH. Если задано options.env, но не задано PATH, в Unix поиск выполняется по пути поиска по умолчанию /usr/bin:/bin (см. руководство операционной системы по execvpe/execvp), а в Windows используется переменная окружения PATH текущего процесса.

В Windows имена переменных окружения нечувствительны к регистру. Node.js сортирует ключи env лексикографически и использует первый ключ, совпадающий без учета регистра. Дочернему процессу будет передана только первая запись в лексикографическом порядке. Это может привести к проблемам в Windows при передаче параметру env объектов с несколькими вариантами одного ключа, например PATH и Path.

Метод spawn создает дочерний процесс асинхронно, не блокируя цикл событий Node.js. Функция spawnSync обеспечивает аналогичную функциональность синхронным способом, блокируя цикл событий до выхода созданного процесса или его завершения.

Для удобства модуль node:child_process предоставляет несколько синхронных и асинхронных альтернатив функциям spawn и spawnSync. Каждая из этих альтернатив реализована на основе spawn или spawnSync.

  • exec: создает оболочку и выполняет в ней команду, передавая stdout и stderr функции обратного вызова по завершении.
  • execFile: похожа на exec, но по умолчанию напрямую создает процесс команды, не создавая предварительно оболочку.
  • fork: создает новый процесс Node.js и запускает указанный модуль, устанавливая канал связи IPC, который позволяет отправлять сообщения между родительским и дочерним процессами.
  • execSync: синхронная версия exec, блокирующая цикл событий Node.js.
  • execFileSync: синхронная версия execFile, блокирующая цикл событий Node.js.

Для некоторых задач, например автоматизации скриптов оболочки, synchronous counterparts может быть удобнее. Однако во многих случаях синхронные методы могут существенно повлиять на производительность, поскольку цикл событий приостанавливает работу, пока созданные процессы не завершатся.

Использование в Deno

import * as mod from "node:child_process";

класс ChildProcess

наследует EventEmitter

Использование в Deno

import { ChildProcess } from "node:child_process";

Экземпляры ChildProcess представляют запущенные дочерние процессы.

Экземпляры ChildProcess не предназначены для создания напрямую. Вместо этого используйте методы spawn, exec,execFile или fork, чтобы создавать экземпляры ChildProcess.

Свойства

channel:
Pipe
| null
| undefined
только для чтения
необязательное

Свойство subprocess.channel ссылается на канал IPC дочернего процесса. Если канал IPC отсутствует, это свойство равно undefined.

connected: boolean
только для чтения

Свойство subprocess.connected указывает, можно ли по-прежнему отправлять сообщения дочернему процессу и получать их от него. Если subprocess.connected равно false, отправка и получение сообщений больше невозможны.

exitCode: number | null
только для чтения

Свойство subprocess.exitCode указывает код завершения дочернего процесса. Если дочерний процесс всё ещё выполняется, значением поля будет null.

killed: boolean
только для чтения

Свойство subprocess.killed указывает, успешно ли дочерний процесс получил сигнал от subprocess.kill(). Свойство killed не указывает на то, что дочерний процесс был завершён.

pid: number | undefined
только для чтения
необязательное

Возвращает идентификатор процесса (PID) дочернего процесса. Если запуск дочернего процесса не удался из-за ошибок, значением будет undefined и будет сгенерировано событие error.

import { spawn } from 'node:child_process';
const grep = spawn('grep', ['ssh']);

console.log(`Spawned child pid: ${grep.pid}`);
grep.stdin.end();
signalCode: Signals | null
только для чтения

Свойство subprocess.signalCode указывает сигнал, полученный дочерним процессом, если таковой имеется; в противном случае — null.

spawnargs: string[]
только для чтения

Свойство subprocess.spawnargs представляет полный список аргументов командной строки, с которыми был запущен дочерний процесс.

spawnfile: string
только для чтения

Свойство subprocess.spawnfile указывает имя исполняемого файла запущенного дочернего процесса.

Для fork его значение будет равно process.execPath. Для spawn его значением будет имя исполняемого файла. Для exec его значением будет имя оболочки, в которой запускается дочерний процесс.

stderr: Readable | null

Объект Readable Stream, представляющий stderr дочернего процесса.

Если дочерний процесс был запущен с параметром stdio[2], установленным в любое значение, отличное от 'pipe', то это значение будет null.

subprocess.stderr — это псевдоним subprocess.stdio[2]. Оба свойства будут ссылаться на одно и то же значение.

Свойство subprocess.stderr может иметь значение null или undefined, если дочерний процесс не удалось запустить.

stdin: Writable | null

Объект Writable Stream, представляющий stdin дочернего процесса.

Если дочерний процесс ожидает чтения всех входных данных, он не продолжит работу, пока этот поток не будет закрыт с помощью end().

Если дочерний процесс был запущен с параметром stdio[0], установленным в любое значение, отличное от 'pipe', то это значение будет null.

subprocess.stdin — это псевдоним subprocess.stdio[0]. Оба свойства будут ссылаться на одно и то же значение.

Свойство subprocess.stdin может иметь значение null или undefined, если дочерний процесс не удалось запустить.

stdio: [
Writable | null,
Readable | null,
Readable | null,
Readable
| Writable
| null
| undefined
,
Readable
| Writable
| null
| undefined
,
]
только для чтения

Разреженный массив каналов для дочернего процесса, соответствующих позициям в параметре stdio, переданном в spawn, которым присвоено значение 'pipe'. Значения subprocess.stdio[0], subprocess.stdio[1] и subprocess.stdio[2] также доступны как subprocess.stdin, subprocess.stdout и subprocess.stderr соответственно.

В следующем примере в канал настроен только дескриптор файла 1 дочернего процесса (stdout), поэтому потоком является только subprocess.stdio[1] родительского процесса, а все остальные значения в массиве равны null.

import assert from 'node:assert';
import fs from 'node:fs';
import child_process from 'node:child_process';

const subprocess = child_process.spawn('ls', {
  stdio: [
    0, // Use parent's stdin for child.
    'pipe', // Pipe child's stdout to parent.
    fs.openSync('err.out', 'w'), // Direct child's stderr to a file.
  ],
});

assert.strictEqual(subprocess.stdio[0], null);
assert.strictEqual(subprocess.stdio[0], subprocess.stdin);

assert(subprocess.stdout);
assert.strictEqual(subprocess.stdio[1], subprocess.stdout);

assert.strictEqual(subprocess.stdio[2], null);
assert.strictEqual(subprocess.stdio[2], subprocess.stderr);

Свойство subprocess.stdio может иметь значение undefined, если дочерний процесс не удалось запустить.

stdout: Readable | null

Объект Readable Stream, представляющий stdout дочернего процесса.

Если дочерний процесс был запущен с параметром stdio[1], установленным в любое значение, отличное от 'pipe', то это значение будет null.

subprocess.stdout — это псевдоним subprocess.stdio[1]. Оба свойства будут ссылаться на одно и то же значение.

import { spawn } from 'node:child_process';

const subprocess = spawn('ls');

subprocess.stdout.on('data', (data) => {
  console.log(`Received chunk ${data}`);
});

Свойство subprocess.stdout может иметь значение null или undefined, если дочерний процесс не удалось запустить.

Методы

[Symbol.dispose](): void

Вызывает ChildProcess.kill с аргументом 'SIGTERM'.

addListener(
event: string,
listener: (...args: any[]) => void,
): this

events.EventEmitter

  1. close
  2. disconnect
  3. error
  4. exit
  5. message
  6. spawn
addListener(
event: "close",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
addListener(
event: "disconnect",
listener: () => void,
): this
addListener(
event: "error",
listener: (err: Error) => void,
): this
addListener(
event: "exit",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
addListener(
event: "message",
listener: (
message: Serializable,
sendHandle: SendHandle,
) => void
,
): this
addListener(
event: "spawn",
listener: () => void,
): this
disconnect(): void

Закрывает канал IPC между родительским и дочерним процессами, позволяя дочернему процессу корректно завершиться, если нет других соединений, удерживающих его. После вызова этого метода свойства subprocess.connected и process.connected родительского и дочернего процессов (соответственно) будут установлены в false, и передавать сообщения между процессами станет невозможно.

Событие 'disconnect' будет сгенерировано, когда не останется сообщений, которые находятся в процессе получения. Обычно оно генерируется сразу после вызова subprocess.disconnect().

Если дочерний процесс является экземпляром Node.js (например, запущен с помощью fork), метод process.disconnect() можно вызвать и в дочернем процессе, чтобы также закрыть канал IPC.

emit(
event: string | symbol,
...args: any[],
): boolean
emit(
event: "close",
code: number | null,
signal: Signals | null,
): boolean
emit(event: "disconnect"): boolean
emit(
event: "error",
err: Error,
): boolean
emit(
event: "exit",
code: number | null,
signal: Signals | null,
): boolean
emit(
event: "message",
message: Serializable,
sendHandle: SendHandle,
): boolean
emit(
event: "spawn",
listener: () => void,
): boolean
kill(signal?: Signals | number): boolean

Метод subprocess.kill() отправляет сигнал дочернему процессу. Если аргумент не указан, процессу будет отправлен сигнал 'SIGTERM'. Список доступных сигналов см. в разделе signal(7). Эта функция возвращает true, если вызов kill(2) выполнен успешно, и false в противном случае.

import { spawn } from 'node:child_process';
const grep = spawn('grep', ['ssh']);

grep.on('close', (code, signal) => {
  console.log(
    `child process terminated due to receipt of signal ${signal}`);
});

// Send SIGHUP to process.
grep.kill('SIGHUP');

Объект ChildProcess может сгенерировать событие 'error', если сигнал не удастся доставить. Отправка сигнала уже завершившемуся дочернему процессу не является ошибкой, но может привести к непредвиденным последствиям. В частности, если идентификатор процесса (PID) был повторно присвоен другому процессу, сигнал будет отправлен этому процессу, что может привести к неожиданным результатам.

Хотя функция называется kill, отправленный дочернему процессу сигнал может фактически не завершить процесс.

Справочную информацию см. в разделе kill(2).

В Windows, где сигналов POSIX не существует, аргумент signal игнорируется, а процесс принудительно и немедленно завершается (аналогично 'SIGKILL'). Дополнительные сведения см. в Signal Events.

В Linux дочерние процессы дочерних процессов не завершаются при попытке завершить родительский процесс. Такое может произойти при запуске нового процесса в оболочке или с использованием параметра shell метода ChildProcess:

'use strict';
import { spawn } from 'node:child_process';

const subprocess = spawn(
  'sh',
  [
    '-c',
    `node -e "setInterval(() => {
      console.log(process.pid, 'is alive')
    }, 500);"`,
  ], {
    stdio: ['inherit', 'inherit', 'inherit'],
  },
);

setTimeout(() => {
  subprocess.kill(); // Does not terminate the Node.js process in the shell.
}, 2000);
on(
event: string,
listener: (...args: any[]) => void,
): this
on(
event: "close",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
on(
event: "disconnect",
listener: () => void,
): this
on(
event: "error",
listener: (err: Error) => void,
): this
on(
event: "exit",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
on(
event: "message",
listener: (
message: Serializable,
sendHandle: SendHandle,
) => void
,
): this
on(
event: "spawn",
listener: () => void,
): this
once(
event: string,
listener: (...args: any[]) => void,
): this
once(
event: "close",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
once(
event: "disconnect",
listener: () => void,
): this
once(
event: "error",
listener: (err: Error) => void,
): this
once(
event: "exit",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
once(
event: "message",
listener: (
message: Serializable,
sendHandle: SendHandle,
) => void
,
): this
once(
event: "spawn",
listener: () => void,
): this
prependListener(
event: string,
listener: (...args: any[]) => void,
): this
prependListener(
event: "close",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
prependListener(
event: "disconnect",
listener: () => void,
): this
prependListener(
event: "error",
listener: (err: Error) => void,
): this
prependListener(
event: "exit",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
prependListener(
event: "message",
listener: (
message: Serializable,
sendHandle: SendHandle,
) => void
,
): this
prependListener(
event: "spawn",
listener: () => void,
): this
prependOnceListener(
event: string,
listener: (...args: any[]) => void,
): this
prependOnceListener(
event: "close",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
prependOnceListener(
event: "disconnect",
listener: () => void,
): this
prependOnceListener(
event: "error",
listener: (err: Error) => void,
): this
prependOnceListener(
event: "exit",
listener: (
code: number | null,
signal: Signals | null,
) => void
,
): this
prependOnceListener(
event: "message",
listener: (
message: Serializable,
sendHandle: SendHandle,
) => void
,
): this
prependOnceListener(
event: "spawn",
listener: () => void,
): this
ref(): void

Вызов subprocess.ref() после вызова subprocess.unref() восстановит удалённый счётчик ссылок дочернего процесса, заставив родительский процесс ожидать завершения дочернего, прежде чем завершиться самому.

import { spawn } from 'node:child_process';

const subprocess = spawn(process.argv[0], ['child_program.js'], {
  detached: true,
  stdio: 'ignore',
});

subprocess.unref();
subprocess.ref();
send(
message: Serializable,
callback?: (error: Error | null) => void,
): boolean

Если между родительским и дочерним процессами установлен канал IPC (то есть при использовании fork), метод subprocess.send() можно использовать для отправки сообщений дочернему процессу. Если дочерний процесс является экземпляром Node.js, эти сообщения можно получить через событие 'message'.

Сообщение проходит сериализацию и разбор. Полученное сообщение может отличаться от исходного.

Например, в родительском скрипте:

import cp from 'node:child_process';
const n = cp.fork(`${__dirname}/sub.js`);

n.on('message', (m) => {
  console.log('PARENT got message:', m);
});

// Causes the child to print: CHILD got message: { hello: 'world' }
n.send({ hello: 'world' });

А дочерний скрипт, 'sub.js', может выглядеть так:

process.on('message', (m) => {
  console.log('CHILD got message:', m);
});

// Causes the parent to print: PARENT got message: { foo: 'bar', baz: null }
process.send({ foo: 'bar', baz: NaN });

У дочерних процессов Node.js есть собственный метод process.send(), позволяющий дочернему процессу отправлять сообщения родительскому.

Особый случай — отправка сообщения {cmd: 'NODE_foo'}. Сообщения, содержащие префикс NODE_ в свойстве cmd, зарезервированы для внутреннего использования в ядре Node.js и не будут генерироваться как событие 'message' дочернего процесса. Вместо этого такие сообщения генерируются как событие 'internalMessage' и обрабатываются внутри Node.js. Приложениям следует избегать отправки таких сообщений и прослушивания событий 'internalMessage', поскольку их поведение может измениться без предупреждения.

Необязательный аргумент sendHandle, который можно передать в subprocess.send(), предназначен для передачи дочернему процессу объекта TCP-сервера или сокета. Дочерний процесс получит этот объект в качестве второго аргумента функции обратного вызова, зарегистрированной для события 'message'. Данные, полученные и буферизованные сокетом, дочернему процессу отправлены не будут. Передача сокетов IPC в Windows не поддерживается.

Необязательный аргумент callback — это функция, вызываемая после отправки сообщения, но до того, как дочерний процесс может его получить. Функция вызывается с одним аргументом: null в случае успеха или объектом Error в случае ошибки.

Если функция callback не указана и сообщение не удаётся отправить, объект ChildProcess сгенерирует событие 'error'. Такое может произойти, например, если дочерний процесс уже завершился.

Метод subprocess.send() вернёт false, если канал закрыт или очередь неотправленных сообщений превысила порог, после которого отправка дополнительных сообщений становится нежелательной. В противном случае метод возвращает true. Для реализации управления потоком можно использовать функцию callback.

Пример: отправка объекта сервера

Аргумент sendHandle можно использовать, например, для передачи дескриптора объекта TCP-сервера дочернему процессу, как показано в примере ниже:

import { createServer } from 'node:net';
import { fork } from 'node:child_process';
const subprocess = fork('subprocess.js');

// Open up the server object and send the handle.
const server = createServer();
server.on('connection', (socket) => {
  socket.end('handled by parent');
});
server.listen(1337, () => {
  subprocess.send('server', server);
});

Затем дочерний процесс получит объект сервера следующим образом:

process.on('message', (m, server) => {
  if (m === 'server') {
    server.on('connection', (socket) => {
      socket.end('handled by child');
    });
  }
});

После того как сервер станет общим для родительского и дочернего процессов, часть соединений сможет обрабатывать родительский процесс, а часть — дочерний.

В приведённом выше примере используется сервер, созданный с помощью модуля node:net. Серверы модуля node:dgram работают точно так же, за исключением того, что вместо события 'connection' нужно ожидать событие 'message', а вместо server.listen() использовать server.bind(). Однако такая возможность поддерживается только на платформах Unix.

Пример: отправка объекта сокета

Аналогичным образом аргумент sendHandler можно использовать для передачи дочернему процессу дескриптора сокета. В примере ниже запускаются два дочерних процесса, каждый из которых обрабатывает соединения с «обычным» или «высоким» приоритетом:

import { createServer } from 'node:net';
import { fork } from 'node:child_process';
const normal = fork('subprocess.js', ['normal']);
const special = fork('subprocess.js', ['special']);

// Open up the server and send sockets to child. Use pauseOnConnect to prevent
// the sockets from being read before they are sent to the child process.
const server = createServer({ pauseOnConnect: true });
server.on('connection', (socket) => {

  // If this is special priority...
  if (socket.remoteAddress === '74.125.127.100') {
    special.send('socket', socket);
    return;
  }
  // This is normal priority.
  normal.send('socket', socket);
});
server.listen(1337);

subprocess.js получит дескриптор сокета в качестве второго аргумента функции обратного вызова события:

process.on('message', (m, socket) => {
  if (m === 'socket') {
    if (socket) {
      // Check that the client socket exists.
      // It is possible for the socket to be closed between the time it is
      // sent and the time it is received in the child process.
      socket.end(`Request handled with ${process.argv[2]} priority`);
    }
  }
});

Не используйте .maxConnections для сокета, переданного подпроцессу. Родительский процесс не может отследить момент уничтожения сокета.

Обработчики 'message' в подпроцессе должны проверять наличие socket, поскольку соединение может быть закрыто за время, необходимое для передачи соединения дочернему процессу.

send(
message: Serializable,
sendHandle?: SendHandle,
callback?: (error: Error | null) => void,
): boolean
send(
message: Serializable,
sendHandle?: SendHandle,
options?: MessageOptions,
callback?: (error: Error | null) => void,
): boolean
unref(): void

По умолчанию родительский процесс ожидает завершения отсоединённого дочернего процесса. Чтобы родительский процесс не ожидал завершения заданного subprocess, используйте метод subprocess.unref(). В результате дочерний процесс не будет учитываться в счётчике ссылок цикла событий родительского процесса, что позволит родительскому процессу завершиться независимо от дочернего, если между ними не установлен канал IPC.

import { spawn } from 'node:child_process';

const subprocess = spawn(process.argv[0], ['child_program.js'], {
  detached: true,
  stdio: 'ignore',
});

subprocess.unref();

функция exec

Использование в Deno

import { exec } from "node:child_process";

Перегрузка 1

exec(
command: string,
callback?: (
error: ExecException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Запускает оболочку, а затем выполняет command в этой оболочке, буферизуя весь сформированный вывод. Строка command, переданная функции exec, обрабатывается непосредственно оболочкой, поэтому со специальными символами (набор которых зависит от оболочки) следует обращаться соответствующим образом:

import { exec } from 'node:child_process';

exec('"/path/to/test file/test.sh" arg1 arg2');
// Double quotes are used so that the space in the path is not interpreted as
// a delimiter of multiple arguments.

exec('echo "The \\$HOME variable is $HOME"');
// The $HOME variable is escaped in the first instance, but not in the second.

Никогда не передавайте этой функции непроверенные пользовательские данные. Любые данные, содержащие метасимволы оболочки, могут использоваться для запуска произвольных команд.

Если указана функция callback, она вызывается с аргументами (error, stdout, stderr). В случае успеха error будет null. В случае ошибки error будет экземпляром Error. Свойство error.code будет содержать код завершения процесса. По соглашению, любой код завершения, отличный от 0, указывает на ошибку. error.signal будет сигналом, завершившим процесс.

Аргументы stdout и stderr, переданные обратному вызову, будут содержать вывод stdout и stderr дочернего процесса. По умолчанию Node.js декодирует вывод в UTF-8 и передает обратному вызову строки. Параметр encoding можно использовать, чтобы указать кодировку символов для декодирования вывода stdout и stderr. Если encoding имеет значение 'buffer' или содержит неизвестную кодировку символов, обратному вызову будут переданы объекты Buffer.

import { exec } from 'node:child_process';
exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.error(`stderr: ${stderr}`);
});

Если значение timeout больше 0, родительский процесс отправит сигнал, указанный свойством killSignal (по умолчанию — 'SIGTERM'), если дочерний процесс будет выполняться дольше timeout миллисекунд.

В отличие от системного вызова POSIX exec(3), child_process.exec() не заменяет текущий процесс и использует оболочку для выполнения команды.

Если этот метод вызван в своей версии с суффиксом util.promisify(), он возвращает Promise для Object со свойствами stdout и stderr. Возвращенный экземпляр ChildProcess прикрепляется к Promise как свойство child. В случае ошибки (включая любую ошибку, приводящую к коду завершения, отличному от 0) возвращается отклоненный промис с тем же объектом error, который передается в обратный вызов, но с двумя дополнительными свойствами: stdout и stderr.

import util from 'node:util';
import child_process from 'node:child_process';
const exec = util.promisify(child_process.exec);

async function lsExample() {
  const { stdout, stderr } = await exec('ls');
  console.log('stdout:', stdout);
  console.error('stderr:', stderr);
}
lsExample();

Если включен параметр signal, вызов .abort() для соответствующего AbortController аналогичен вызову .kill() для дочернего процесса, за исключением того, что ошибка, передаваемая обратному вызову, будет иметь тип AbortError:

import { exec } from 'node:child_process';
const controller = new AbortController();
const { signal } = controller;
const child = exec('grep ssh', { signal }, (error) => {
  console.error(error); // an AbortError
});
controller.abort();

Параметры

command: string

Команда для выполнения с аргументами, разделенными пробелами.

callback: (
error: ExecException | null,
stdout: string,
stderr: string,
) => void
необязательный

вызывается с результатом выполнения после завершения процесса.

Тип возвращаемого значения

ChildProcess

Перегрузка 2

exec(
command: string,
options: { encoding: "buffer" | null; } & ExecOptions,
callback?: (
error: ExecException | null,
stdout: Buffer,
stderr: Buffer,
) => void
,
): ChildProcess

Параметры

command: string
options: { encoding: "buffer" | null; } & ExecOptions
callback: (
error: ExecException | null,
stdout: Buffer,
stderr: Buffer,
) => void
необязательный

Тип возвращаемого значения

ChildProcess

Перегрузка 3

exec(
command: string,
options: { encoding: BufferEncoding; } & ExecOptions,
callback?: (
error: ExecException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Параметры

command: string
options: { encoding: BufferEncoding; } & ExecOptions
callback: (
error: ExecException | null,
stdout: string,
stderr: string,
) => void
необязательный

Тип возвращаемого значения

ChildProcess

Перегрузка 4

exec(
command: string,
options: { encoding: BufferEncoding; } & ExecOptions,
callback?: (
error: ExecException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void
,
): ChildProcess

Параметры

command: string
options: { encoding: BufferEncoding; } & ExecOptions
callback: (
error: ExecException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void
необязательный

Тип возвращаемого значения

ChildProcess

Перегрузка 5

exec(
command: string,
options: ExecOptions,
callback?: (
error: ExecException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Параметры

command: string
options: ExecOptions
callback: (
error: ExecException | null,
stdout: string,
stderr: string,
) => void
необязательный

Тип возвращаемого значения

ChildProcess

Перегрузка 6

exec(
command: string,
options:
(ObjectEncodingOptions & ExecOptions)
| undefined
| null
,
callback?: (
error: ExecException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void
,
): ChildProcess

Параметры

command: string
options:
(ObjectEncodingOptions & ExecOptions)
| undefined
| null
callback: (
error: ExecException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void
необязательный

Тип возвращаемого значения

ChildProcess

функция execFile

Использование в Deno

import { execFile } from "node:child_process";

Перегрузка 1

execFile(file: string): ChildProcess

Функция child_process.execFile() аналогична exec, за исключением того, что по умолчанию она не запускает оболочку. Вместо этого указанный исполняемый файл file запускается непосредственно как новый процесс, что делает функцию немного эффективнее, чем exec.

Поддерживаются те же параметры, что и для exec. Поскольку оболочка не запускается, такие возможности, как перенаправление ввода-вывода и подстановка имен файлов, не поддерживаются.

import { execFile } from 'node:child_process';
const child = execFile('node', ['--version'], (error, stdout, stderr) => {
  if (error) {
    throw error;
  }
  console.log(stdout);
});

Аргументы stdout и stderr, переданные обратному вызову, будут содержать вывод stdout и stderr дочернего процесса. По умолчанию Node.js декодирует вывод в UTF-8 и передает обратному вызову строки. Параметр encoding можно использовать, чтобы указать кодировку символов для декодирования вывода stdout и stderr. Если encoding имеет значение 'buffer' или содержит неизвестную кодировку символов, обратному вызову будут переданы объекты Buffer.

Если этот метод вызван в своей версии с суффиксом util.promisify(), он возвращает Promise для Object со свойствами stdout и stderr. Возвращенный экземпляр ChildProcess прикрепляется к Promise как свойство child. В случае ошибки (включая любую ошибку, приводящую к коду завершения, отличному от 0) возвращается отклоненный промис с тем же объектом error, который передается в обратный вызов, но с двумя дополнительными свойствами: stdout и stderr.

import util from 'node:util';
import child_process from 'node:child_process';
const execFile = util.promisify(child_process.execFile);
async function getVersion() {
  const { stdout } = await execFile('node', ['--version']);
  console.log(stdout);
}
getVersion();

Если включен параметр shell, не передавайте этой функции непроверенные пользовательские данные. Любые данные, содержащие метасимволы оболочки, могут использоваться для запуска произвольных команд.

Если включен параметр signal, вызов .abort() для соответствующего AbortController аналогичен вызову .kill() для дочернего процесса, за исключением того, что ошибка, передаваемая обратному вызову, будет иметь тип AbortError:

import { execFile } from 'node:child_process';
const controller = new AbortController();
const { signal } = controller;
const child = execFile('node', ['--version'], { signal }, (error) => {
  console.error(error); // an AbortError
});
controller.abort();

Параметры

file: string

Имя или путь к исполняемому файлу.

Тип возвращаемого значения

ChildProcess

Перегрузка 2

execFile(
file: string,
options:
(ObjectEncodingOptions & ExecFileOptions)
| undefined
| null
,
): ChildProcess

Параметры

file: string
options:
(ObjectEncodingOptions & ExecFileOptions)
| undefined
| null

Тип возвращаемого значения

ChildProcess

Перегрузка 3

execFile(
file: string,
args?: readonly string[] | null,
): ChildProcess

Параметры

file: string
args: readonly string[] | null
необязательный

Тип возвращаемого значения

ChildProcess

Перегрузка 4

execFile(
file: string,
args:
readonly string[]
| undefined
| null
,
options:
(ObjectEncodingOptions & ExecFileOptions)
| undefined
| null
,
): ChildProcess

Параметры

file: string
args:
readonly string[]
| undefined
| null
options:
(ObjectEncodingOptions & ExecFileOptions)
| undefined
| null

Тип возвращаемого значения

ChildProcess

Перегрузка 5

execFile(
file: string,
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Параметры

file: string
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 6

execFile(
file: string,
args:
readonly string[]
| undefined
| null
,
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Параметры

file: string
args:
readonly string[]
| undefined
| null
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 7

execFile(
file: string,
options: ExecFileOptionsWithBufferEncoding,
callback: (
error: ExecFileException | null,
stdout: Buffer,
stderr: Buffer,
) => void
,
): ChildProcess

Параметры

file: string
options: ExecFileOptionsWithBufferEncoding
callback: (
error: ExecFileException | null,
stdout: Buffer,
stderr: Buffer,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 8

execFile(
file: string,
args:
readonly string[]
| undefined
| null
,
options: ExecFileOptionsWithBufferEncoding,
callback: (
error: ExecFileException | null,
stdout: Buffer,
stderr: Buffer,
) => void
,
): ChildProcess

Параметры

file: string
args:
readonly string[]
| undefined
| null
options: ExecFileOptionsWithBufferEncoding
callback: (
error: ExecFileException | null,
stdout: Buffer,
stderr: Buffer,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 9

execFile(
file: string,
options: ExecFileOptionsWithStringEncoding,
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Параметры

file: string
options: ExecFileOptionsWithStringEncoding
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 10

execFile(
file: string,
args:
readonly string[]
| undefined
| null
,
options: ExecFileOptionsWithStringEncoding,
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Параметры

file: string
args:
readonly string[]
| undefined
| null
options: ExecFileOptionsWithStringEncoding
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 11

execFile(
file: string,
options: ExecFileOptionsWithOtherEncoding,
callback: (
error: ExecFileException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void
,
): ChildProcess

Параметры

file: string
options: ExecFileOptionsWithOtherEncoding
callback: (
error: ExecFileException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 12

execFile(
file: string,
args:
readonly string[]
| undefined
| null
,
options: ExecFileOptionsWithOtherEncoding,
callback: (
error: ExecFileException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void
,
): ChildProcess

Параметры

file: string
args:
readonly string[]
| undefined
| null
options: ExecFileOptionsWithOtherEncoding
callback: (
error: ExecFileException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 13

execFile(
file: string,
options: ExecFileOptions,
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Параметры

file: string
options: ExecFileOptions
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 14

execFile(
file: string,
args:
readonly string[]
| undefined
| null
,
options: ExecFileOptions,
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void
,
): ChildProcess

Параметры

file: string
args:
readonly string[]
| undefined
| null
options: ExecFileOptions
callback: (
error: ExecFileException | null,
stdout: string,
stderr: string,
) => void

Тип возвращаемого значения

ChildProcess

Перегрузка 15

execFile(
file: string,
options:
(ObjectEncodingOptions & ExecFileOptions)
| undefined
| null
,
callback:
((
error: ExecFileException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void)

| undefined
| null
,
): ChildProcess

Параметры

file: string
options:
(ObjectEncodingOptions & ExecFileOptions)
| undefined
| null
callback:
((
error: ExecFileException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void)

| undefined
| null

Тип возвращаемого значения

ChildProcess

Перегрузка 16

execFile(
file: string,
args:
readonly string[]
| undefined
| null
,
options:
(ObjectEncodingOptions & ExecFileOptions)
| undefined
| null
,
callback:
((
error: ExecFileException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void)

| undefined
| null
,
): ChildProcess

Параметры

file: string
args:
readonly string[]
| undefined
| null
options:
(ObjectEncodingOptions & ExecFileOptions)
| undefined
| null
callback:
((
error: ExecFileException | null,
stdout: string | Buffer,
stderr: string | Buffer,
) => void)

| undefined
| null

Тип возвращаемого значения

ChildProcess

функция execFileSync

Использование в Deno

import { execFileSync } from "node:child_process";

Перегрузка 1

execFileSync(file: string): Buffer

Метод child_process.execFileSync() в целом идентичен execFile, за исключением того, что он не возвращает управление, пока дочерний процесс полностью не завершится. Если истекло время ожидания и отправлен сигнал killSignal, метод не вернёт управление, пока процесс полностью не завершится.

Если дочерний процесс перехватывает сигнал SIGTERM и обрабатывает его, но не завершает работу, родительский процесс всё равно будет ждать завершения дочернего процесса.

Если время ожидания процесса истекло или он завершился с ненулевым кодом выхода, этот метод выбросит Error, содержащую полный результат вызова spawnSync.

Если параметр shell включён, не передавайте этой функции непроверенные пользовательские данные. Любые данные, содержащие метасимволы командной оболочки, могут быть использованы для запуска произвольных команд.

Параметры

file: string

Имя или путь к исполняемому файлу, который нужно запустить.

Тип возвращаемого значения

Buffer

Стандартный вывод команды.

Перегрузка 2

execFileSync(
file: string,
options: ExecFileSyncOptionsWithStringEncoding,
): string

Параметры

file: string
options: ExecFileSyncOptionsWithStringEncoding

Тип возвращаемого значения

string

Перегрузка 3

execFileSync(
file: string,
options: ExecFileSyncOptionsWithBufferEncoding,
): Buffer

Параметры

file: string
options: ExecFileSyncOptionsWithBufferEncoding

Тип возвращаемого значения

Buffer

Перегрузка 4

execFileSync(
file: string,
options?: ExecFileSyncOptions,
): string | Buffer

Параметры

file: string
options: ExecFileSyncOptions
необязательный

Тип возвращаемого значения

string | Buffer

Перегрузка 5

execFileSync(
file: string,
args: readonly string[],
): Buffer

Параметры

file: string
args: readonly string[]

Тип возвращаемого значения

Buffer

Перегрузка 6

execFileSync(
file: string,
args: readonly string[],
options: ExecFileSyncOptionsWithStringEncoding,
): string

Параметры

file: string
args: readonly string[]
options: ExecFileSyncOptionsWithStringEncoding

Тип возвращаемого значения

string

Перегрузка 7

execFileSync(
file: string,
args: readonly string[],
options: ExecFileSyncOptionsWithBufferEncoding,
): Buffer

Параметры

file: string
args: readonly string[]
options: ExecFileSyncOptionsWithBufferEncoding

Тип возвращаемого значения

Buffer

Перегрузка 8

execFileSync(
file: string,
args?: readonly string[],
options?: ExecFileSyncOptions,
): string | Buffer

Параметры

file: string
args: readonly string[]
необязательный
options: ExecFileSyncOptions
необязательный

Тип возвращаемого значения

string | Buffer

функция execSync

Использование в Deno

import { execSync } from "node:child_process";

Перегрузка 1

execSync(command: string): Buffer

Метод child_process.execSync() в целом идентичен exec, за исключением того, что он не возвращает управление, пока дочерний процесс полностью не завершится. Если истекло время ожидания и отправлен сигнал killSignal, метод не вернёт управление, пока процесс полностью не завершится. Если дочерний процесс перехватывает сигнал SIGTERM и обрабатывает его, но не завершается, родительский процесс будет ждать завершения дочернего процесса.

Если время ожидания процесса истекло или он завершился с ненулевым кодом выхода, этот метод выбросит исключение. Объект Error будет содержать полный результат вызова spawnSync.

Никогда не передавайте этой функции непроверенные пользовательские данные. Любые данные, содержащие метасимволы командной оболочки, могут быть использованы для запуска произвольных команд.

Параметры

command: string

Команда для запуска.

Тип возвращаемого значения

Buffer

Стандартный вывод команды.

Перегрузка 2

execSync(
command: string,
options: ExecSyncOptionsWithStringEncoding,
): string

Параметры

command: string
options: ExecSyncOptionsWithStringEncoding

Тип возвращаемого значения

string

Перегрузка 3

execSync(
command: string,
options: ExecSyncOptionsWithBufferEncoding,
): Buffer

Параметры

command: string
options: ExecSyncOptionsWithBufferEncoding

Тип возвращаемого значения

Buffer

Перегрузка 4

execSync(
command: string,
options?: ExecSyncOptions,
): string | Buffer

Параметры

command: string
options: ExecSyncOptions
необязательный

Тип возвращаемого значения

string | Buffer

функция fork

Использование в Deno

import { fork } from "node:child_process";

Перегрузка 1

fork(
modulePath: string | URL,
options?: ForkOptions,
): ChildProcess

Метод child_process.fork() — это частный случай spawn, предназначенный специально для запуска новых процессов Node.js. Как и spawn, он возвращает объект ChildProcess. У возвращённого объекта ChildProcess будет встроен дополнительный канал связи, позволяющий передавать сообщения между родительским и дочерним процессами. Подробности см. в subprocess.send().

Помните, что запущенные дочерние процессы Node.js независимы от родительского, за исключением канала связи IPC, установленного между ними. У каждого процесса своя память и собственный экземпляр V8. Из-за дополнительных ресурсов, необходимых для выделения, не рекомендуется запускать большое количество дочерних процессов Node.js.

По умолчанию child_process.fork() запускает новые экземпляры Node.js с использованием process.execPath родительского процесса. Свойство execPath объекта options позволяет использовать альтернативный путь выполнения.

Процессы Node.js, запущенные с пользовательским execPath, будут взаимодействовать с родительским процессом через файловый дескриптор (fd), указанный с помощью переменной окружения NODE_CHANNEL_FD дочернего процесса.

В отличие от системного вызова POSIX fork(2), child_process.fork() не клонирует текущий процесс.

Параметр shell, доступный в spawn, не поддерживается методом child_process.fork() и игнорируется, если он задан.

Если параметр signal включён, вызов .abort() для соответствующего AbortController аналогичен вызову .kill() для дочернего процесса, за исключением того, что в callback передаётся ошибка типа AbortError:

if (process.argv[2] === 'child') {
  setTimeout(() => {
    console.log(`Hello from ${process.argv[2]}!`);
  }, 1_000);
} else {
  import { fork } from 'node:child_process';
  const controller = new AbortController();
  const { signal } = controller;
  const child = fork(__filename, ['child'], { signal });
  child.on('error', (err) => {
    // This will be called with err being an AbortError if the controller aborts
  });
  controller.abort(); // Stops the child process
}

Параметры

modulePath: string | URL

Модуль для запуска в дочернем процессе.

options: ForkOptions
необязательный

Тип возвращаемого значения

ChildProcess

Перегрузка 2

fork(
modulePath: string | URL,
args?: readonly string[],
options?: ForkOptions,
): ChildProcess

Параметры

modulePath: string | URL
args: readonly string[]
необязательный
options: ForkOptions
необязательный

Тип возвращаемого значения

ChildProcess

функция spawn

Использование в Deno

import { spawn } from "node:child_process";

Перегрузка 1

spawn(
command: string,
options?: SpawnOptionsWithoutStdio,
): ChildProcessWithoutNullStreams

Метод child_process.spawn() запускает новый процесс с использованием указанного command и аргументами командной строки в args. Если параметр не указан, args по умолчанию равно пустому массиву.

Если параметр shell включён, не передавайте этой функции необработанные пользовательские данные. Любые данные, содержащие метасимволы оболочки, могут привести к выполнению произвольных команд.

Третий аргумент можно использовать для указания дополнительных параметров со следующими значениями по умолчанию:

const defaults = {
  cwd: undefined,
  env: process.env,
};

Используйте cwd, чтобы указать рабочий каталог, из которого запускается процесс. Если он не указан, по умолчанию используется текущий рабочий каталог. Если каталог указан, но путь не существует, дочерний процесс выдаёт ошибку ENOENT и немедленно завершается. ENOENT также выдаётся, если команда не существует.

Используйте env, чтобы указать переменные среды, которые будут доступны новому процессу. По умолчанию используется process.env.

Значения undefined в env будут проигнорированы.

Пример запуска ls -lh /usr с перехватом stdout, stderr и кода завершения:

import { spawn } from 'node:child_process';
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

Пример: весьма сложный способ запустить ps ax | grep ssh

import { spawn } from 'node:child_process';
const ps = spawn('ps', ['ax']);
const grep = spawn('grep', ['ssh']);

ps.stdout.on('data', (data) => {
  grep.stdin.write(data);
});

ps.stderr.on('data', (data) => {
  console.error(`ps stderr: ${data}`);
});

ps.on('close', (code) => {
  if (code !== 0) {
    console.log(`ps process exited with code ${code}`);
  }
  grep.stdin.end();
});

grep.stdout.on('data', (data) => {
  console.log(data.toString());
});

grep.stderr.on('data', (data) => {
  console.error(`grep stderr: ${data}`);
});

grep.on('close', (code) => {
  if (code !== 0) {
    console.log(`grep process exited with code ${code}`);
  }
});

Пример проверки наличия ошибок spawn:

import { spawn } from 'node:child_process';
const subprocess = spawn('bad_command');

subprocess.on('error', (err) => {
  console.error('Failed to start subprocess.');
});

На некоторых платформах (macOS, Linux) для заголовка процесса будет использоваться значение argv[0], а на других (Windows, SunOS) — command.

При запуске Node.js перезаписывает argv[0] значением process.execPath, поэтому значение process.argv[0] в дочернем процессе Node.js не будет совпадать с параметром argv0, переданным родительским процессом в spawn. Чтобы получить это значение, используйте свойство process.argv0.

Если параметр signal включён, вызов .abort() для соответствующего AbortController аналогичен вызову .kill() для дочернего процесса, за исключением того, что ошибка, передаваемая обратному вызову, будет иметь тип AbortError:

import { spawn } from 'node:child_process';
const controller = new AbortController();
const { signal } = controller;
const grep = spawn('grep', ['ssh'], { signal });
grep.on('error', (err) => {
  // This will be called with err being an AbortError if the controller aborts
});
controller.abort(); // Stops the child process

Параметры

command: string

Команда для запуска.

options: SpawnOptionsWithoutStdio
необязательный

Возвращаемый тип

ChildProcessWithoutNullStreams

Перегрузка 2

spawn(
command: string,
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioPipe>,
): ChildProcessByStdio<Writable, Readable, Readable>

Параметры

command: string
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioPipe>

Возвращаемый тип

ChildProcessByStdio<Writable, Readable, Readable>

Перегрузка 3

spawn(
command: string,
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioNull>,
): ChildProcessByStdio<Writable, Readable, null>

Параметры

command: string
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioNull>

Возвращаемый тип

ChildProcessByStdio<Writable, Readable, null>

Перегрузка 4

spawn(
command: string,
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioPipe>,
): ChildProcessByStdio<Writable, null, Readable>

Параметры

command: string
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioPipe>

Возвращаемый тип

ChildProcessByStdio<Writable, null, Readable>

Перегрузка 5

spawn(
command: string,
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>,
): ChildProcessByStdio<null, Readable, Readable>

Параметры

command: string
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>

Возвращаемый тип

ChildProcessByStdio<null, Readable, Readable>

Перегрузка 6

spawn(
command: string,
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioNull>,
): ChildProcessByStdio<Writable, null, null>

Параметры

command: string
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioNull>

Возвращаемый тип

ChildProcessByStdio<Writable, null, null>

Перегрузка 7

spawn(
command: string,
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioNull>,
): ChildProcessByStdio<null, Readable, null>

Параметры

command: string
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioNull>

Возвращаемый тип

ChildProcessByStdio<null, Readable, null>

Перегрузка 8

spawn(
command: string,
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioPipe>,
): ChildProcessByStdio<null, null, Readable>

Параметры

command: string
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioPipe>

Возвращаемый тип

ChildProcessByStdio<null, null, Readable>

Перегрузка 9

spawn(
command: string,
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioNull>,
): ChildProcessByStdio<null, null, null>

Параметры

command: string
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioNull>

Возвращаемый тип

ChildProcessByStdio<null, null, null>

Перегрузка 10

spawn(
command: string,
options: SpawnOptions,
): ChildProcess

Параметры

command: string
options: SpawnOptions

Возвращаемый тип

ChildProcess

Перегрузка 11

spawn(
command: string,
args?: readonly string[],
options?: SpawnOptionsWithoutStdio,
): ChildProcessWithoutNullStreams

Параметры

command: string
args: readonly string[]
необязательный
options: SpawnOptionsWithoutStdio
необязательный

Возвращаемый тип

ChildProcessWithoutNullStreams

Перегрузка 12

spawn(
command: string,
args: readonly string[],
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioPipe>,
): ChildProcessByStdio<Writable, Readable, Readable>

Параметры

command: string
args: readonly string[]
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioPipe>

Возвращаемый тип

ChildProcessByStdio<Writable, Readable, Readable>

Перегрузка 13

spawn(
command: string,
args: readonly string[],
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioNull>,
): ChildProcessByStdio<Writable, Readable, null>

Параметры

command: string
args: readonly string[]
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioPipe, StdioNull>

Возвращаемый тип

ChildProcessByStdio<Writable, Readable, null>

Перегрузка 14

spawn(
command: string,
args: readonly string[],
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioPipe>,
): ChildProcessByStdio<Writable, null, Readable>

Параметры

command: string
args: readonly string[]
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioPipe>

Возвращаемый тип

ChildProcessByStdio<Writable, null, Readable>

Перегрузка 15

spawn(
command: string,
args: readonly string[],
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>,
): ChildProcessByStdio<null, Readable, Readable>

Параметры

command: string
args: readonly string[]
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioPipe>

Возвращаемый тип

ChildProcessByStdio<null, Readable, Readable>

Перегрузка 16

spawn(
command: string,
args: readonly string[],
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioNull>,
): ChildProcessByStdio<Writable, null, null>

Параметры

command: string
args: readonly string[]
options: SpawnOptionsWithStdioTuple<StdioPipe, StdioNull, StdioNull>

Возвращаемый тип

ChildProcessByStdio<Writable, null, null>

Перегрузка 17

spawn(
command: string,
args: readonly string[],
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioNull>,
): ChildProcessByStdio<null, Readable, null>

Параметры

command: string
args: readonly string[]
options: SpawnOptionsWithStdioTuple<StdioNull, StdioPipe, StdioNull>

Возвращаемый тип

ChildProcessByStdio<null, Readable, null>

Перегрузка 18

spawn(
command: string,
args: readonly string[],
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioPipe>,
): ChildProcessByStdio<null, null, Readable>

Параметры

command: string
args: readonly string[]
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioPipe>

Возвращаемый тип

ChildProcessByStdio<null, null, Readable>

Перегрузка 19

spawn(
command: string,
args: readonly string[],
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioNull>,
): ChildProcessByStdio<null, null, null>

Параметры

command: string
args: readonly string[]
options: SpawnOptionsWithStdioTuple<StdioNull, StdioNull, StdioNull>

Возвращаемый тип

ChildProcessByStdio<null, null, null>

Перегрузка 20

spawn(
command: string,
args: readonly string[],
options: SpawnOptions,
): ChildProcess

Параметры

command: string
args: readonly string[]
options: SpawnOptions

Возвращаемый тип

ChildProcess

функция spawnSync

Использование в Deno

import { spawnSync } from "node:child_process";

Перегрузка 1

spawnSync(command: string): SpawnSyncReturns<Buffer>

Метод child_process.spawnSync() в целом идентичен spawn, за исключением того, что функция не возвращает управление, пока дочерний процесс полностью не завершится. Если истекает время ожидания и отправляется killSignal, метод не вернёт управление, пока процесс полностью не завершится. Если процесс перехватывает сигнал SIGTERM и обрабатывает его, но не завершает работу, родительский процесс будет ждать, пока дочерний процесс не завершится.

Если параметр shell включён, не передавайте этой функции непроверенные пользовательские данные. Любые данные, содержащие метасимволы оболочки, могут быть использованы для запуска произвольных команд.

Параметры

command: string

Команда для запуска.

Возвращаемый тип

SpawnSyncReturns<Buffer>

Перегрузка 2

spawnSync(
command: string,
options: SpawnSyncOptionsWithStringEncoding,
): SpawnSyncReturns<string>

Параметры

command: string
options: SpawnSyncOptionsWithStringEncoding

Возвращаемый тип

SpawnSyncReturns<string>

Перегрузка 3

spawnSync(
command: string,
options: SpawnSyncOptionsWithBufferEncoding,
): SpawnSyncReturns<Buffer>

Параметры

command: string
options: SpawnSyncOptionsWithBufferEncoding

Возвращаемый тип

SpawnSyncReturns<Buffer>

Перегрузка 4

spawnSync(
command: string,
options?: SpawnSyncOptions,
): SpawnSyncReturns<string | Buffer>

Параметры

command: string
options: SpawnSyncOptions
необязательный

Возвращаемый тип

SpawnSyncReturns<string | Buffer>

Перегрузка 5

spawnSync(
command: string,
args: readonly string[],
): SpawnSyncReturns<Buffer>

Параметры

command: string
args: readonly string[]

Возвращаемый тип

SpawnSyncReturns<Buffer>

Перегрузка 6

spawnSync(
command: string,
args: readonly string[],
options: SpawnSyncOptionsWithStringEncoding,
): SpawnSyncReturns<string>

Параметры

command: string
args: readonly string[]
options: SpawnSyncOptionsWithStringEncoding

Возвращаемый тип

SpawnSyncReturns<string>

Перегрузка 7

spawnSync(
command: string,
args: readonly string[],
options: SpawnSyncOptionsWithBufferEncoding,
): SpawnSyncReturns<Buffer>

Параметры

command: string
args: readonly string[]
options: SpawnSyncOptionsWithBufferEncoding

Возвращаемый тип

SpawnSyncReturns<Buffer>

Перегрузка 8

spawnSync(
command: string,
args?: readonly string[],
options?: SpawnSyncOptions,
): SpawnSyncReturns<string | Buffer>

Параметры

command: string
args: readonly string[]
необязательный
options: SpawnSyncOptions
необязательный

Возвращаемый тип

SpawnSyncReturns<string | Buffer>

интерфейс ChildProcessByStdio

расширяет ChildProcess

Использование в Deno

import { type ChildProcessByStdio } from "node:child_process";

Параметры типа

I extends null | Writable
O extends null | Readable
E extends null | Readable

Свойства

stdin: I
stdout: O
stderr: E
stdio: [
I,
O,
E,
Readable
| Writable
| null
| undefined
,
Readable
| Writable
| null
| undefined
,
]
только для чтения

интерфейс ChildProcessWithoutNullStreams

расширяет ChildProcess

Использование в Deno

import { type ChildProcessWithoutNullStreams } from "node:child_process";

Свойства

stdin: Writable
stdout: Readable
stderr: Readable
stdio: [
Writable,
Readable,
Readable,
Readable
| Writable
| null
| undefined
,
Readable
| Writable
| null
| undefined
,
]
только для чтения

интерфейс CommonExecOptions

расширяет CommonOptions

Использование в Deno

import { type CommonExecOptions } from "node:child_process";

Свойства

input:
string
| ArrayBufferView
| undefined
необязательный
stdio: StdioOptions | undefined
необязательный

Может принимать значение 'pipe', 'inherit' или 'ignore', а также массив из этих строк. Если передан массив, первый элемент используется для stdin, второй — для stdout, а третий — для stderr. Четвёртый элемент можно использовать, чтобы задать поведение stdio за пределами стандартных потоков. Дополнительные сведения см. в ChildProcess.stdio.

killSignal:
Signals
| number
| undefined
необязательный
maxBuffer: number | undefined
необязательный
encoding:
BufferEncoding
| "buffer"
| null
| undefined
необязательный

интерфейс CommonOptions

расширяет ProcessEnvOptions

Использование в Deno

import { type CommonOptions } from "node:child_process";

Свойства

windowsHide: boolean | undefined
необязательный
timeout: number | undefined
необязательный

интерфейс CommonSpawnOptions

расширяет CommonOptionsMessagingOptionsAbortable,

Использование в Deno

import { type CommonSpawnOptions } from "node:child_process";

Свойства

argv0: string | undefined
необязательный
stdio: StdioOptions | undefined
необязательный

Может принимать значение 'pipe', 'inherit', 'overlapped' или 'ignore', а также массив из этих строк. Если передан массив, первый элемент используется для stdin, второй — для stdout, а третий — для stderr. Четвёртый элемент можно использовать, чтобы задать поведение stdio за пределами стандартных потоков. Дополнительные сведения см. в ChildProcess.stdio.

shell:
boolean
| string
| undefined
необязательный
windowsVerbatimArguments: boolean | undefined
необязательный

интерфейс ExecException

расширяет Error

Использование в Deno

import { type ExecException } from "node:child_process";

Свойства

cmd: string | undefined
необязательный
killed: boolean | undefined
необязательный
code: number | undefined
необязательный
signal: Signals | undefined
необязательный
stdout: string
необязательный
stderr: string
необязательный

интерфейс ExecFileOptions

расширяет CommonOptionsAbortable

Использование в Deno

import { type ExecFileOptions } from "node:child_process";

Свойства

maxBuffer: number | undefined
необязательный
killSignal:
Signals
| number
| undefined
необязательный
windowsVerbatimArguments: boolean | undefined
необязательный
shell:
boolean
| string
| undefined
необязательный
signal: AbortSignal | undefined
необязательный

интерфейс ExecFileOptionsWithBufferEncoding

расширяет ExecFileOptions

Использование в Deno

import { type ExecFileOptionsWithBufferEncoding } from "node:child_process";

Свойства

encoding: "buffer" | null

интерфейс ExecFileOptionsWithOtherEncoding

расширяет ExecFileOptions

Использование в Deno

import { type ExecFileOptionsWithOtherEncoding } from "node:child_process";

Свойства

encoding: BufferEncoding

интерфейс ExecFileOptionsWithStringEncoding

расширяет ExecFileOptions

Использование в Deno

import { type ExecFileOptionsWithStringEncoding } from "node:child_process";

Свойства

encoding: BufferEncoding

интерфейс ExecFileSyncOptions

расширяет CommonExecOptions

Использование в Deno

import { type ExecFileSyncOptions } from "node:child_process";

Свойства

shell:
boolean
| string
| undefined
необязательный

интерфейс ExecFileSyncOptionsWithBufferEncoding

extends ExecFileSyncOptions

Использование в Deno

import { type ExecFileSyncOptionsWithBufferEncoding } from "node:child_process";

Свойства

encoding: "buffer" | null
необязательный

интерфейс ExecFileSyncOptionsWithStringEncoding

extends ExecFileSyncOptions

Использование в Deno

import { type ExecFileSyncOptionsWithStringEncoding } from "node:child_process";

Свойства

encoding: BufferEncoding

интерфейс ExecOptions

extends CommonOptions

Использование в Deno

import { type ExecOptions } from "node:child_process";

Свойства

shell: string | undefined
необязательный
signal: AbortSignal | undefined
необязательный
maxBuffer: number | undefined
необязательный
killSignal:
Signals
| number
| undefined
необязательный

интерфейс ExecOptionsWithBufferEncoding

extends ExecOptions

Использование в Deno

import { type ExecOptionsWithBufferEncoding } from "node:child_process";

Свойства

encoding: BufferEncoding | null

интерфейс ExecOptionsWithStringEncoding

extends ExecOptions

Использование в Deno

import { type ExecOptionsWithStringEncoding } from "node:child_process";

Свойства

encoding: BufferEncoding

интерфейс ExecSyncOptions

extends CommonExecOptions

Использование в Deno

import { type ExecSyncOptions } from "node:child_process";

Свойства

shell: string | undefined
необязательный

интерфейс ExecSyncOptionsWithBufferEncoding

extends ExecSyncOptions

Использование в Deno

import { type ExecSyncOptionsWithBufferEncoding } from "node:child_process";

Свойства

encoding:
"buffer"
| null
| undefined
необязательный

интерфейс ExecSyncOptionsWithStringEncoding

extends ExecSyncOptions

Использование в Deno

import { type ExecSyncOptionsWithStringEncoding } from "node:child_process";

Свойства

encoding: BufferEncoding

интерфейс ForkOptions

extends ProcessEnvOptionsMessagingOptionsAbortable,

Использование в Deno

import { type ForkOptions } from "node:child_process";

Свойства

execPath: string | undefined
необязательный
execArgv: string[] | undefined
необязательный
silent: boolean | undefined
необязательный
stdio: StdioOptions | undefined
необязательный

Можно задать значение 'pipe', 'inherit', 'overlapped' или 'ignore' либо массив этих строк. Если передан массив, первый элемент используется для stdin, второй — для stdout, а третий — для stderr. Четвёртый элемент можно использовать, чтобы указать поведение stdio за пределами стандартных потоков. Дополнительные сведения см. в ChildProcess.stdio.

detached: boolean | undefined
необязательный
windowsVerbatimArguments: boolean | undefined
необязательный

интерфейс MessageOptions

Использование в Deno

import { type MessageOptions } from "node:child_process";

Свойства

keepOpen: boolean | undefined
необязательный

интерфейс MessagingOptions

extends Abortable

Использование в Deno

import { type MessagingOptions } from "node:child_process";

Свойства

serialization: SerializationType | undefined
необязательный

Указывает тип сериализации, используемый для отправки сообщений между процессами.

killSignal:
Signals
| number
| undefined
необязательный

Значение сигнала, которое будет использоваться при завершении порождённого процесса сигналом прерывания.

timeout: number | undefined
необязательный

Максимальное время работы процесса в миллисекундах.


интерфейс ProcessEnvOptions

Использование в Deno

import { type ProcessEnvOptions } from "node:child_process";

Свойства

uid: number | undefined
необязательный
gid: number | undefined
необязательный
cwd:
string
| URL
| undefined
необязательный
env: ProcessEnv | undefined
необязательный

интерфейс PromiseWithChild

extends Promise<T>

Использование в Deno

import { type PromiseWithChild } from "node:child_process";

Параметры типа

T

Свойства

child: ChildProcess

интерфейс SpawnOptions

extends CommonSpawnOptions

Использование в Deno

import { type SpawnOptions } from "node:child_process";

Свойства

detached: boolean | undefined
необязательный

интерфейс SpawnOptionsWithoutStdio

extends SpawnOptions

Использование в Deno

import { type SpawnOptionsWithoutStdio } from "node:child_process";

Свойства

stdio:
StdioPipeNamed
| StdioPipe[]
| undefined
необязательный

интерфейс SpawnOptionsWithStdioTuple

extends SpawnOptions

Использование в Deno

import { type SpawnOptionsWithStdioTuple } from "node:child_process";

Параметры типа

Stdin extends StdioNull | StdioPipe
Stdout extends StdioNull | StdioPipe
Stderr extends StdioNull | StdioPipe

Свойства

stdio: [
Stdin,
Stdout,
Stderr,
]

интерфейс SpawnSyncOptions

extends CommonSpawnOptions

Использование в Deno

import { type SpawnSyncOptions } from "node:child_process";

Свойства

input:
string
| ArrayBufferView
| undefined
необязательный
maxBuffer: number | undefined
необязательный
encoding:
BufferEncoding
| "buffer"
| null
| undefined
необязательный

интерфейс SpawnSyncOptionsWithBufferEncoding

extends SpawnSyncOptions

Использование в Deno

import { type SpawnSyncOptionsWithBufferEncoding } from "node:child_process";

Свойства

encoding:
"buffer"
| null
| undefined
необязательный

интерфейс SpawnSyncOptionsWithStringEncoding

extends SpawnSyncOptions

Использование в Deno

import { type SpawnSyncOptionsWithStringEncoding } from "node:child_process";

Свойства

encoding: BufferEncoding

интерфейс SpawnSyncReturns

Использование в Deno

import { type SpawnSyncReturns } from "node:child_process";

Параметры типа

T

Свойства

pid: number
output: Array<T | null>
stdout: T
stderr: T
status: number | null
signal: Signals | null
error: Error | undefined
необязательное

псевдоним типа ExecFileException

Использование в Deno

import { type ExecFileException } from "node:child_process";

Определение

Omit<ExecException, "code">
& Omit<ErrnoException, "code">
& { code?:
string
| number
| undefined
| null
; }

псевдоним типа IOType

Использование в Deno

import { type IOType } from "node:child_process";

Определение

"overlapped"
| "pipe"
| "ignore"
| "inherit"

псевдоним типа SendHandle

Использование в Deno

import { type SendHandle } from "node:child_process";

Определение

net.Socket
| net.Server
| dgram.Socket
| undefined

псевдоним типа Serializable

Использование в Deno

import { type Serializable } from "node:child_process";

Определение

string
| object
| number
| boolean
| bigint

псевдоним типа SerializationType

Использование в Deno

import { type SerializationType } from "node:child_process";

Определение

"json" | "advanced"

псевдоним типа StdioNull

Использование в Deno

import { type StdioNull } from "node:child_process";

Определение

"inherit"
| "ignore"
| Stream

псевдоним типа StdioOptions

Использование в Deno

import { type StdioOptions } from "node:child_process";

Определение

IOType | Array<
IOType
| "ipc"
| Stream
| number
| null
| undefined
>

псевдоним типа StdioPipe

Использование в Deno

import { type StdioPipe } from "node:child_process";

Определение

undefined
| null
| StdioPipeNamed

псевдоним типа StdioPipeNamed

Использование в Deno

import { type StdioPipeNamed } from "node:child_process";

Определение

"pipe" | "overlapped"

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/child_process

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API