요청시 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>
).
시도'spawn'. 'exec'는 여러분이 볼 수있는 것처럼 쉘을 실행합니다. – vkurchatkin
'child_process.spawn ('mpg123', [ ' "'+ filename + '"'])'나에게 PID를 제공하지만 음악을 시작하지 않으며 프로세스가 아닙니다. 콘솔에서 grep 할 때 실행됩니다. – user655321