在承诺结束时终止子进程

用户名

我使用以下代码创建子进程,该进程按预期工作,现在我想要做的是在该进程的末尾杀死它,然后尝试使用最后一个(如果我把BP停在那之后,流程已完成),我的问题是如何正确杀死它并避免出现此错误。

getCmd提供要运行的命令,该命令按预期工作

var childProcess = Promise.promisify(require('child_process').exec);

....
            .then(getCmd)
            .then(childProcess)
            .spread(function (stdout, stderr) {
                console.log(stdout, stderr);
                return stdout;
            }).then(function(){

                childProcess.kill()
            })

childProcess.kill()执行该行时,出现错误:

[TypeError: undefined is not a function]

如何克服这个问题并最终终止进程

漫游者1888

据我所知,自我传播require('child_process').exec是不正确的。充其量,您最终会得到一个返回诺言的函数,但是直接地,您将被拒绝对子进程本身的引用。需要一些想象力。

您可以require('child_process').exec(cmd, callback)new Promise()包装器内以常规方式进行调用并且至关重要的是,可以通过在promise链中提供对子流程的引用来进行解析/拒绝。

我不确定Bluebird的.promisify()灵活性是否足以胜任这项工作,因此这里有一个手动说明。

首先,一对夫妇或要求:

var Promise = require('bluebird');
var child_process = require('child_process');

现在,手动promisifier:

function childProcessPromise (method, cmd) {
    return new Promise(function(resolve, reject) {
        var child = child_process[method](cmd, function(error, stdout, stderr) {
            if(error !== null) {
                error.child = child;//monkeypatch the error with a custom .child property.
                reject(error);
            } else {
                resolve({ 'child':child, 'stdout':stdout, 'stderr':stderr });//all available data bundled into a single object.
            }
        });
    });
}

如前所述,这个承诺器足够灵活,可以满足各种child_process方法。只需传递(或绑定)“ spawn”,“ exec”,“ execFile”或“ fork”作为第一个参数。

您的诺言链将如下所示:

....
    .then(getCmd)
    .then(childProcessPromise.bind(null, 'exec'))
    .then(function(result) {
        // result.child, result.stdout and result.stderr are available here.
    }, function(error) {
        //error is available here, including its custom .child property.
    });

所有未经测试,因此请做好适应/修复的准备。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

asyncio在超时时终止子进程

来自分类Dev

当另一个子进程完成时,如何终止子进程?

来自分类Dev

当父进程被“ kill -9”杀死时,如何终止子进程

来自分类Dev

在子进程运行和通信时终止子进程,这些子进程通过队列进行清晰的通信

来自分类Dev

终止子进程的父进程的输出是什么?

来自分类Dev

在一段时间后终止子进程

来自分类Dev

父鱼壳进程终止后立即终止子进程?

来自分类Dev

子进程结束时signal.signal接收sigint / sigterm

来自分类Dev

当hasNextInt()遇到输入结束时,Java突然终止

来自分类Dev

Java尝试捕获是否在父线程被阻塞时使用闭包捕获终止子线程?

来自分类Dev

进程结束时,内核级线程会发生什么?

来自分类Dev

程序结束时进程返回0xC0000005

来自分类Dev

如何在C中达到一定时间限制后准确地终止子进程?

来自分类Dev

在进程启动时杀死explorer.exe,在进程结束时重新启动

来自分类Dev

子活动结束时刷新父活动

来自分类Dev

子活动结束时刷新父活动

来自分类Dev

Bash 文件:并行运行进程并在一个进程结束时停止

来自分类Dev

终止子流程。在PyQt5中打开

来自分类Dev

当父进程等待子进程终止时,子进程如何杀死父进程?

来自分类Dev

终止从已结束的进程启动的进程-Python

来自分类Dev

结束时停止滑动

来自分类Dev

CountDownTimer结束时的通知

来自分类Dev

命令结束时的sudo

来自分类Dev

当进程结束时,在Sleep()中间的线程会发生什么情况?

来自分类Dev

从脚本启动后台进程,并在脚本结束时进行管理

来自分类Dev

运行结束时线程结束?

来自分类Dev

杀死子进程时防止出现“已终止”消息

来自分类Dev

C ++:使用waitpid时等待子进程终止

来自分类Dev

当父程序终止时,Process.Start是否终止子程序?

Related 相关文章

  1. 1

    asyncio在超时时终止子进程

  2. 2

    当另一个子进程完成时,如何终止子进程?

  3. 3

    当父进程被“ kill -9”杀死时,如何终止子进程

  4. 4

    在子进程运行和通信时终止子进程,这些子进程通过队列进行清晰的通信

  5. 5

    终止子进程的父进程的输出是什么?

  6. 6

    在一段时间后终止子进程

  7. 7

    父鱼壳进程终止后立即终止子进程?

  8. 8

    子进程结束时signal.signal接收sigint / sigterm

  9. 9

    当hasNextInt()遇到输入结束时,Java突然终止

  10. 10

    Java尝试捕获是否在父线程被阻塞时使用闭包捕获终止子线程?

  11. 11

    进程结束时,内核级线程会发生什么?

  12. 12

    程序结束时进程返回0xC0000005

  13. 13

    如何在C中达到一定时间限制后准确地终止子进程?

  14. 14

    在进程启动时杀死explorer.exe,在进程结束时重新启动

  15. 15

    子活动结束时刷新父活动

  16. 16

    子活动结束时刷新父活动

  17. 17

    Bash 文件:并行运行进程并在一个进程结束时停止

  18. 18

    终止子流程。在PyQt5中打开

  19. 19

    当父进程等待子进程终止时,子进程如何杀死父进程?

  20. 20

    终止从已结束的进程启动的进程-Python

  21. 21

    结束时停止滑动

  22. 22

    CountDownTimer结束时的通知

  23. 23

    命令结束时的sudo

  24. 24

    当进程结束时,在Sleep()中间的线程会发生什么情况?

  25. 25

    从脚本启动后台进程,并在脚本结束时进行管理

  26. 26

    运行结束时线程结束?

  27. 27

    杀死子进程时防止出现“已终止”消息

  28. 28

    C ++:使用waitpid时等待子进程终止

  29. 29

    当父程序终止时,Process.Start是否终止子程序?

热门标签

归档