2015-01-04 2 views
0

요청시 MP #를 재생할 내 Raspberry Pi를위한 아주 간단한 음악 서버를 작성하고 있습니다. child_process.exec()을 사용하여 mpg123의 인스턴스를 성공적으로 시작할 수 있지만이 새로운 프로세스의 PID는 실제로 음악을 디코딩하는 프로세스와 다릅니다. 작업을 중지하려는 사용자의 경우 프로세스를 추적하기 때문에 이것은 중요합니다 (child.kill()). 다음과 같이 실행하고 있습니다.child_process.exec에 의해 생성 된 두 개의 프로세스

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

출력이 {"pid":9444}이고 음악이 재생되기 시작합니다.

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를 재생하는 무슨이다 : 나는 ps aux | grep mpg123 확인 그러나, 나는 두 개의 서로 다른 프로세스를 참조하십시오. 요청시 child.kill()에 매달리면 첫 번째 작업이 종료되지만 두 번째 잔여 작업이 남아있어 종료가 효과적이지 않습니다.

다른 방법으로이를 피하는 방법이나이를 제거하는 더 좋은 방법이 있습니까? 차라리 모든 것을 추적 할 필요가 없으며 (예를 들어 내가 만든 명령)이를 기반으로 '올바른'트랙을 추적하려고합니다 (예 : ps aux | grep <filename>).

+0

시도'spawn'. 'exec'는 여러분이 볼 수있는 것처럼 쉘을 실행합니다. – vkurchatkin

+0

'child_process.spawn ('mpg123', [ ' "'+ filename + '"'])'나에게 PID를 제공하지만 음악을 시작하지 않으며 프로세스가 아닙니다. 콘솔에서 grep 할 때 실행됩니다. – user655321

답변

1

this page에 따르면 child_process.execFile(cmd, [args]).exec 프로세스의 PID 인 새 하위 쉘을 생성합니다. 그 다음 서브 쉘은 내 인스턴스 mpg123을 만들었는데, 이것은 내가 죽이려고했던 프로세스입니다.

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

을 그리고 그것을 죽이고 싶어 할 때, 나는 간단하게 할 수 있습니다 : 대신, 사용

child.kill(); // works 
관련 문제