如何正确杀死child_process?

时间:2015-12-22 02:29:03

标签: linux node.js ubuntu fedora atom-editor

在atom-text-editor插件开发中,我运行了一个child_process,如

cp = require 'child_process'
command = "python /home/user45/jedi-python2-complete.py"
@jediServer = cp.exec command

我杀了这个过程,

process.kill(@jediServer.pid)

在ubuntu-os中,两个进程被创建为sh和python(jedi-python2-complete.py),但在fedora中只创建了一个进程(jedi-python2-complete.py)。

当我尝试使用process.kill杀死ubuntu中的进程时,只有sh-process被杀死但是python进程在后台继续运行..而在fedora中python进程被杀死了。

例如, 在ubuntu,  sh pid-3560  python pid-3561

在fedora中的python-process pid- 3560

我相对尝试解决它,

process.kill(pid)
process.kill(pid+1)

但是还有其他任何方式。对于linux操作系统来说很常见。

2 个答案:

答案 0 :(得分:1)

最好在名为BufferedProcess的child_process周围使用Atom的包装器。如果您使用自己的.kill方法,它将在Windows上正常终止进程。

您可以查看如何在此autocomplete-python包源中使用它。

答案 1 :(得分:0)

这为我工作,

cp = require 'child_process'
command = "python"
env = process.env
spawn = cp.spawn
@jediServer = spawn(command,[__dirname + jedi-python2-complete.py],env:env)

我杀了这个过程,

@jediServer.kill()

这在ubuntu,fedora中都是一样的,没有任何变化。 来自用户Michael Aquilina的推荐代码