退出执行sh文件的child_process



我使用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完成之前收到exitexit只是意味着您的进程已经退出(因此,下载应该已经完成(。如果进程向标准输出/标准错误写入了一些内容,则该数据可能仍存储在一些缓冲区中,直到被消耗掉为止。

相关内容

  • 没有找到相关文章