由 child_process.exec 创建的两个进程



我正在为我的Raspberry Pi编写一个非常简单的音乐服务器,它可以按需播放MP#s。我可以使用child_process.exec()成功启动mpg123实例,但这个新过程的PID与实际解码音乐的过程不同。这对我来说很重要,因为我想在用户想要停止作业(child.kill())的情况下跟踪进程。我正在执行如下:

var child = child_process.exec('mpg123 "' + filename + '"');
console.log(JSON.stringify({pid: child.pid});

这将输出{"pid":9444},音乐开始播放。但是,当我检查ps aux | grep mpg123时,我看到两个不同的过程:

pi        9444  0.0  0.1   1760   504 pts/1    S+   18:55   0:00 /bin/sh -c mpg123 "/home/pi/test.mp3"
pi        9445 11.0  0.6  14840  3112 pts/1    S+   18:55   0:00 mpg123 /home/pi/test.mp3

后一个过程,9445,实际上是在播放我的mp3。如果我坚持child并根据要求.kill(),第一个工作被杀死,但第二个工作徘徊,使杀戮无效。

有没有不同的方法来创建一个避免这种情况的过程,或者一些更好的方法来杀死它?我宁愿不必跟踪所有内容(例如,我用来创建它的命令)并尝试基于此跟踪"正确"的命令(例如,ps aux | grep <filename>)。

根据此页面,child_process.execFile(cmd, [args])将生成一个新的子shell,这是.exec进程的pid。然后子壳创建了我的mpg123实例,这就是我想杀死的过程。相反,我使用:

var child = child_process.execFile('mpg123', [filename]); // note filename isn't enquoted

当我想杀死它时,我可以简单地:

child.kill(); // works

相关内容

  • 没有找到相关文章

最新更新