LINUX.ORG.RU

Кто может объяснить странное поведение motion?

 ,


0

1

Доброго времени суток всем! Пытаюсь сделать что-то типа СКД для дома, ничего особо сложного, так это мой первый проект. Ситуация такая, есть программа сервер (secure), которая принимает данные с proximity считывателя карт, в зависимости от разных ситуаций эта программа должна запустить программу motion либо остановить. Запуск программы выполняется через функцию system(), "system(«/usr/local/bin/motion»)", после запуска motion начинаются проблемы с считывателем, моя программа не получает данных с него. Решил проверить, возможно motion и моя программа используют одинаковые порты, набираю lsof -i |grep 9761 и смотрю выхлоп вот что я вижу:

secure    14315     root   13u  IPv4 305612      0t0  TCP *:9761 (LISTEN)
secure    15011     root   13u  IPv4 305612      0t0  TCP *:9761 (LISTEN)
secure    15011     root   14u  IPv4 305613      0t0  TCP 192.168.0.113:9761->192.168.0.191:1068 (ESTABLISHED)
motion    15230     root   13u  IPv4 305612      0t0  TCP *:9761 (LISTEN)
motion    15230     root   14u  IPv4 305613      0t0  TCP 192.168.0.113:9761->192.168.0.191:1068 (ESTABLISHED)

И lsof -i |grep motion

motion    15230     root    3u  IPv4 305600      0t0  TCP localhost:13013 (LISTEN)
motion    15230     root    4u  IPv4 306048      0t0  TCP localhost:http-alt (LISTEN)
motion    15230     root    8u  IPv4 306044      0t0  TCP 192.168.0.113:39106->192.168.0.114:http (ESTABLISHED)
motion    15230     root    9u  IPv4 306052      0t0  TCP localhost:tproxy (LISTEN)
motion    15230     root   13u  IPv4 305612      0t0  TCP *:9761 (LISTEN)
motion    15230     root   14u  IPv4 305613      0t0  TCP 192.168.0.113:9761->192.168.0.191:1068 (ESTABLISHED)

Motion и моя программа используют одинаковыей порт 9761, поменял порты в своей программе, проверяю... И снова вижу тоже самое, только номер порта другой. Думаю ладно, грохну motion и выполню запуск сам, т.е. «sudo motion». Motion запустился, делаю lsof -i |grep motion

motion     8577     root    3u  IPv4 292557      0t0  TCP localhost:http-alt (LISTEN)
motion     8577     root    5u  IPv4 292550      0t0  TCP 192.168.0.113:39167->192.168.0.114:http (ESTABLISHED)
motion     8577     root    6u  IPv4 292561      0t0  TCP localhost:tproxy (LISTEN)
И вижу, что motion нормально себе работает с IP камерой на 114 айпишнике, и знать ничего не знат про порт 9761, соответственно «lsof -i |grep 9761» показывает мне только мою программу.

Может мне кто-то объяснить что за фигня происходит и как сделать так, чтобы motion не дублировала соединения той программы, которая ее запускает?

Заранее благодарю всех, кто хотя бы дочитал до этого момента!


А зачем его так запускать и останавливать постоянно? Логично один раз запустить при старте системы (init.d, systemd или что там) и управлять уже через API, посылая нужные команды из своей программы.

anonymous
()
Ответ на: комментарий от anonymous

Хороша идея, не знал что motion можно управлять через api. Спасибо!

VladV
() автор топика

man 3 system

system() returns after the command has been completed.

Твоя secure ждет завершения motion.

anonymous
()
Ответ на: комментарий от anonymous

и с такими вопросами в Development надо.

anonymous
()

При запуске другого процесса (exec() семейство, а равно и system()) запускаемый процесс наследует все открытые файловые дескрипторы, включая сетевые сокеты. Обычный приём:

fork();
for(){
  close();
}
exec();

Elyas ★★★★★
()
Ответ на: комментарий от Elyas

Спасибо Большое всем за участие и советы! Ошибку понял, правда еще не понял, чего раньше работало, но главное есть откуда копать, там разберусь))) Еще раз спасибо всем!

VladV
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.