如何在超时后杀死 spawnSync

How to kill spawnSync after a timeout

我想在 ES6 async / await 中终止 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 秒或更长时间才能 运行。

但是由于await,setTimeout会在test.py全部执行结束后10秒后执行。

如何让 运行 不能超过 2 秒?

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

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