我使用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', (code, signal) => {
console.log("close");
})
这是我的输出
Data
Data
Data
Data
Exit
Data
Data
Data
...
这是我的下载.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()
}, 2000);
command.stdout.on('data', data => {
console.log("Data")
})
command.on('exit', (code, signal) => {
console.log("exit");
})
command.on('close', (code, signal) => {
console.log("close");
})
这是我的输出
Data
Data
Data
Data
Exit
Close
如果有人有想法
由于您提到在这两种情况下都会收到所有数据,因此没有问题。
进程是异步的,因此不能保证在data
完成之前收到exit
。exit
只是意味着您的进程已经退出(因此,下载应该已经完成(。如果进程向标准输出/标准错误写入了一些内容,则该数据可能仍存储在一些缓冲区中,直到被消耗掉为止。