| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Руководить процессом |
| Автор: ABC123 4.9.2014, 13:24 | ||
| Здравстуйте, При нажатии разных кнопок хочу запускать, останавливать, паузировать и возобновлять процесс. Только проблема такая. Запускается процесс нормально, останавливается не сразу, а ждет пока файл воспроизведется до конца. Тоже самое и при вызове паузы. А вот из паузы выйти совсем не удается ( игнорируется сигнал?). Скрипт запускает просмотр видео и аудио файлов. Ошибка в коде? Вот такой код:
|
| Автор: bsa 4.9.2014, 16:59 |
| Может использовать сокеты или пайпы для этого? Все-таки сигналы вещь специфическая. |
| Автор: ABC123 4.9.2014, 17:16 |
| Бес понятия как сокетами или пайпами пользоваться. Везде написано, SIGSTOP и SIGCONT. А может воспользоваться чем то вроде pause()? Только не пойму как этим пользоваться правильно. пишу вместо SIGSTOP pause() ничего не происходит |
| Автор: ABC123 7.9.2014, 14:44 |
| Да c остановкой проблем больше нет. А вот воспрос с паузой и продолжением воспроизведения не могу решить вопрос. |
| Автор: bsa 9.9.2014, 11:46 |
| ABC123, тебе же объяснили, что сигналы надо передавать плееру, а не bash'у. Для этого тебе надо запускать плеер напрямую или в скрипте использовать exec для запуска плеера. В противном случае ты не знаешь PID плеера. |
| Автор: ABC123 11.9.2014, 13:30 | ||
| На счет запуска плеера. Нашел исходный код плеера. Вместо скрипта нужно запускать код для плеера? Через командную строку плеер запускается так
Если я посылаю команду kill (0, SIGKILL), то процесс останавливается сразу(тоесть проигрываетель тоже дальше не играет. А вот с паузой выглядит так. Посылаю команду kill (0, SIGSTOP) вот этом случаем плеер доигрыват видео до конца, а потом только остаеавливается. Посылаю команду kill (0, SIGCONT) ничего не происходит. Тоесть эта команда просто игнорируется. Да вообще все команды игнорируются. Посылаю опять kill (0, SIGKILL) тоже ничено не происходит. |
| Автор: konshyn 24.9.2014, 16:53 |
| Я не совсем понял, что нужно автору. Но из всего, что понял, вот, что я бы сделал. Я бы вместо скрипта писал полноценную программу - оболочка для плеера. Эта оболочка должна делать fork() или exec() на плеер. Тогда она будет знать pid процесса, которому отправлять сигнал. После запуска плеера, оболочка должна просто перехватывать состояние активности плеера и нажатия клавиш пользователя, и затем отправлять сигнал плееру. Т.к. автор скорее всего писал плеер не сам, то ничего не могу сказать о том, какие сигналы туда посылать и что с ними делать. Но в своем плеере я бы использовал сигналы реального времени (http://www.ibm.com/developerworks/ru/library/l-signals_2/). С этими сигналами можно и отправлять данные. Данные - это были бы команды, что нужно сделать плееру. А в самом плеере поставил бы обработчик этого сигнала (сигналов). |