Node.js 如何终止由childProcess.exec创建的子进程创建的进程? 问题
从下面的代码可以看出,我正在使用Node.js 如何终止由childProcess.exec创建的子进程创建的进程? 问题,node.js,Node.js,从下面的代码可以看出,我正在使用childProcess.exec()在ffmpeg.exebin上执行一个命令,该命令创建了两个操作系统进程: 子进程:cmd.exe 子进程的子进程ffmpeg.exe 我希望能够通过终止ffmpeg.exe进程来取消该操作,但以下两种方法都不起作用,因为ffmpeg.exe是一个单独的进程: 方法1:const terminatingProcess=childProcess.exec('kill'+process.pid) 方法2:videoConve
childProcess.exec()
在ffmpeg.exe
bin上执行一个命令,该命令创建了两个操作系统进程:
- 子进程:
cmd.exe
- 子进程的子进程
ffmpeg.exe
ffmpeg.exe
进程来取消该操作,但以下两种方法都不起作用,因为ffmpeg.exe
是一个单独的进程:
- 方法1:
const terminatingProcess=childProcess.exec('kill'+process.pid)
- 方法2:
videoConversionProcess.kill()
pid
,也不能在videoConversionProcess
上运行kill()
,因为它终止的是cmd.exe
进程,而不是它产生的ffmpeg.exe
进程
代码
const命令='“E:\\test\\ffmpeg.exe”-y-i“VIDEO\u URL”-vcodec copy-c copy“E:\\test\\VIDEO.ts”
const videoConversionProcess=childProcess.exec(命令)
videoConversionProcess.stdout.on('data',(data)=>{
console.log(数据)
})
当我记录videoConversionProcess
时,我可以看到它产生的cmd.exe
的相关信息,但看不到执行所有工作的ffmpeg.exe
:
ChildProcess {_events: {…}, _eventsCount: 2, _maxListeners: undefined, _closesNeeded: 3, _closesGot: 0, …}
connected: false
exitCode: null
killed: true
pid: 18804
signalCode: "SIGTERM"
spawnargs: Array(5)
0: "C:\WINDOWS\system32\cmd.exe"
1: "/d"
2: "/s"
3: "/c"
4: ""E:\test\ffmpeg.exe" -y -i "VIDEO_URL" -vcodec copy -c copy "E:\test\video.ts"
...
问题:
如何终止操作
有没有办法在
ffmpeg.exe
上执行命令,并让Node.js知道这个过程?我尝试使用spawn
而不是exec
,但我无法使其工作,它根本没有生成ffmpeg.exe
进程。再见,您可以尝试按照指南操作
简而言之,要在windows中终止进程,可以执行以下操作:
exec(`taskkill /PID ${pid} /T /F`, (error, stdout, stderr)=>{
console.log("taskkill stdout: " + stdout)
console.log("taskkill stderr: " + stderr)
if(error){
console.log("error: " + error.message)
}
})
这回答了你的问题吗。它建议使用Windows
taskkill
而不是kill
,允许您包含子项processes@thatotherguy嗯,我不确定这是否是同一件事,因为我已经在ffmpeg.exe
上直接执行了命令。让我试试这些解决方案,确保您正在考虑的是的建议,即使用taskkill
。直接运行脚本的建议不适用,包括接受的答案。@thatotherguy谢谢,其中一个解决方案对我有效。我搜索这个解决方案大概有2个小时,由于某种原因谷歌没有把我带到那个线程,谢谢你让我知道它谢谢你,它成功了,它终止了两个进程