Я пишу довольно простой музыкальный сервер для своей малины Pi, которая будет играть MP # s по требованию. Я могу успешно запустить экземпляр mpg123
с использованием child_process.exec()
, но PID этого нового процесса отличается от процесса, фактически декодирующего музыку. Это важно для меня, потому что я хочу отслеживать процесс в случае, если пользователь хочет остановить работу (child.kill()
). Я выполнение следующим образом:Два процесса, созданных child_process.exec
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>
).
попробовать 'spawn'. 'exec' запускает оболочку, как вы можете видеть – vkurchatkin
' child_process.spawn ('mpg123', ['' '+ filename +' '']) 'дает мне PID, но он не запускает музыку, а процесс не работает когда я grep для одного в консоли. – user655321