Node.js子进程 child_process

190 阅读1分钟

node.js child_process 使用:分为同步进程和异步进程文档传送们

创建子进程的方式

  • spawn: 启动一个子进程来执行命令;

  • exec:  启动一个子进程来执行命令,与 spawn 不同的是,它有一个回调函数获知子进程的状况;

  • execFile: 启动一个子进程来执行可执行文件;

  • fork:  与 spawn 类似,不同点在于它创建 Node 的子进程只需指定要执行的 JavaScript 文件模块即可;

exec使用

child_process.exec(command[, options][, callback])

引入方式

const { exec } = require('child_process');

使用方式: 以执行curl为例:

exec(
      `curl -X POST "es-master:9200/_bulk?pretty" -H 'Content-Type: application/json' --data-binary "@1.txt"`,
      function (err, out, code) {
        if (err instanceof Error) throw err;
        console.log(err);
        console.log(out);
      },
    );

execFile使用

child_process.execFile(file[, args][, options][, callback])

引入方式

const { execFile } = require('child_process');

使用方式: 以执行curl为例:

// node 为文件名
execFile('node',
      function (err, out, code) {
        if (err instanceof Error) throw err;
        console.log(err);
        console.log(out);
      },
    );

spawn使用

child_process.spawn(command[, args][, options])

引入方式

const { spawn } = require('child_process');

使用方式: 以执行curl为例:

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}`);
});

参考

一天清晨