如何在超时后杀死spawnSync

时间:2019-06-17 08:59:00

标签: javascript node.js child-process spawn

我想终止ES6异步/等待中的spawnSync进程。

  (async () => {
    const type = 'python';
    const exefile = './test.py';
    let opt = [file];

    let result = await spawnSync(type, opt, {
      encoding: 'utf-8'
    });

    if (exefile !== '') {

      const exeRst = await spawnSync(exefile, {
        encoding: 'utf-8'
      });

      setTimeout(() => {
        console.log('⏰ Timeout!!');
        console.log('exeResult.pid : ', exeResult.pid);
        exeResult.kill();
      }, 2000);

      if (
        result.output['1'] === '' &&
        result.output['2'] === '' &&
        exeRst.output['1'] !== ''
      ) {
        console.log('?exeResult:', exeRst);
        console.log('?result:', result.output);
      }
    }
  })();

如果第二个spawnSync exeRst需要很长时间,它将在2秒内停止执行。

test.py需要10秒钟或更长时间才能运行。

但是,由于等待,在所有test.py执行结束后的10秒后将执行setTimeout。

如何使它无法运行超过2秒?

1 个答案:

答案 0 :(得分:1)

spawnSync支持名为timeout的选项字段。这指定以毫秒为单位的进程运行时间:

await spawnSync(exefile, {
        encoding: 'utf-8',
        timeout: 2000
      });