Завершить один экземпляр процесса

Не уверен, что это возможно, но вот оно. У меня есть простой сервер, на котором несколько клиентов могут выполнять программу. Каждый раз, когда клиент выполняет сценарий для запуска программы, запускается новый экземпляр программы. Теперь, когда клиент останавливает выполнение программы через другой скрипт, экземпляр программы уничтожается. Проблема в том, что если другой клиент находится на сервере, в то же время выполняя программу, этот экземпляр также будет убит. Есть ли способ подключить конкретный экземпляр к конкретному клиенту?

Вот подробнее. Сервер используется для потоковой передачи мультимедиа из Интернета. У меня есть потоковые устройства, подключенные к телевизорам. Когда конкретный канал выбран, он отправляет сигнал на сервер, который, в свою очередь, запускает несколько сценариев, один из которых является сценарием для запуска процесса преобразования видео с помощью программы под названием ffmpeg. ffmpeg скрывает поток, сохраняет его в папку на сервере, делая его доступным для потокового устройства/телевизора. Каждый раз, когда пользователь запускает канал, запускается экземпляр ffmpeg, поскольку он преобразует другой поток. Как только пользователь заканчивает просмотр, устройство отправляет сигнал обратно на сервер через php-скрипт, который, в свою очередь, запускает скрипт под названием cleanup. Сценарий очистки представляет собой bat-файл, который убивает ffmpeg и удаляет файлы, которые больше не нужны. Все работает отлично, за исключением случаев, когда один человек решает прекратить просмотр, а другой продолжает. Я не знаю, как определить разницу между каждым экземпляром ffmpeg. Я не хочу, чтобы он убивал все экземпляры, только тот, который подключен к одному конкретному потоку, который должен закончиться. У меня есть возможность получить IP-адрес каждого устройства, когда пользователь сначала выбирает канал. Есть ли способ связать IP с конкретным экземпляром?


person B Todd Poole    schedule 11.04.2014    source источник
comment
Я думаю, вам нужно будет показать нам код... может ли сервер обнаружить, что его клиент закрылся? Если это так, он может убить себя. Может ли клиент сообщить серверу, что он закрывается? Если это так, сервер может убить себя. stefan.buettcher.org/cs/conn_closed.html   -  person Mark Setchell    schedule 11.04.2014
comment
Вот необычная идея... может быть, вы могли бы скопировать ffmpeg.exe под новым именем перед его запуском, тогда для каждого клиента будет ffmpeg с другим именем. Итак, скажем, IP-адрес клиента 192.168.0.34, переименуйте ffmpeg.exe в ffmpeg.192.168.0.34.exe перед его запуском, тогда вы знаете, какой экземпляр убить :-)   -  person Mark Setchell    schedule 14.04.2014
comment
Спасибо за идею. Я мог бы попробовать это, но я думаю, что, возможно, смогу использовать netstat и манипулировать некоторой информацией, поскольку каждый новый экземпляр использует другой PID. Спасибо еще раз   -  person B Todd Poole    schedule 14.04.2014


Ответы (1)


На самом деле воспользовался советом сверху и переименовал каждый экземпляр как ip, сохранил ip во временном файле, а затем смог сопоставить его с ip, выполняющим вызов отмены.

person B Todd Poole    schedule 29.05.2015