Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何终止由childProcess.exec创建的子进程创建的进程? 问题_Node.js - Fatal编程技术网

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个小时,由于某种原因谷歌没有把我带到那个线程,谢谢你让我知道它谢谢你,它成功了,它终止了两个进程