问题描述
我使用child_process执行一个sh文件,该文件使用curl下载文件,但是当我使用.exit()函数时,该过程并未停止
const { spawn } = require('child_process');
let command = spawn('./download.sh',["url","name"])
setTimeout(() => {
command.kill()
},2000);
command.stdout.on('data',data => {
console.log("Data")
})
command.on('exit',(code,signal) => {
console.log("exit");
})
command.on('close',signal) => {
console.log("close");
})
这是我的输出
Data
Data
Data
Data
Exit
Data
Data
Data
...
这是我的download.sh
curl {test url} --output test.mp4
但是当我直接使用curl命令执行spawn时,该过程停止了,所以我不明白为什么。
const { spawn } = require('child_process');
let command = spawn('curl',["test url","--output","test.mp4"])
setTimeout(() => {
command.kill()
},signal) => {
console.log("close");
})
这是我的输出
Data
Data
Data
Data
Exit
Close
如果有人有主意
解决方法
由于您提到在两种情况下都可以接收所有数据,所以没有问题。
进程是异步的,因此不能保证您将在exit
完成之前收到data
。 exit
仅表示此时您的进程已退出(因此下载应已完成)。如果该进程向标准输出/标准错误写入了一些内容,则该数据可能仍会存储在某些缓冲区中,直到被消耗为止。