Как правильно убить программу, которая запускается с помощью execl

Я написал программу, которая создает дочерний процесс с помощью fork. В дочернем процессе я использую execl, который открывает локальную html-страницу с помощью firefox:

execl( "/usr/bin/firefox", "/usr/bin/firefox","/home/xyz/t/webpages/page1.html", (char*)NULL);

В родительском процессе после сна в течение 5 секунд я посылаю сигнал SIGTERM дочернему процессу:

sleep(5);
kill(browser_pid,SIGTERM);

После компиляции и запуска все работает нормально. Но когда я запускаю программу более 5 итераций, firefox начинает вести себя хаотично и показывает окно либо для сброса firefox, либо для открытия в безопасном режиме: введите здесь описание изображения

когда я закрываю html-страницу вручную, не отправляя сигнал SIGTERM процессу, и использую кнопку закрытия в браузере, она работает безупречно для любого количества итераций.

Моя программа должна обновлять веб-страницу каждые 5 секунд, чтобы регулярно показывать новый контент. Как я могу сделать то же самое программно?


person nagla    schedule 26.02.2016    source источник
comment
Используйте подключаемый модуль, например ReloadEvery или аналогичный. Firefox не любит, когда его убивают извне. Вы также можете удалить файл sessionstore.js из папки профиля (каждый раз после того, как вы убили firefox!), чтобы предотвратить всплывающее окно безопасного режима.   -  person Ctx    schedule 26.02.2016
comment
спасибо... небольшой вариант вашего подхода.... Я удалил весь ~/.mozilla, и он работает.   -  person nagla    schedule 27.02.2016


Ответы (2)


Попробуйте SIGINT вместо SIGTERM.

person Andrey Rogov    schedule 26.02.2016
comment
не помогло... тот же эффект - person nagla; 27.02.2016

Удаление папки ~/.mozilla решило проблему.

person nagla    schedule 27.02.2016
comment
Пожалуйста, выберите этот ответ, затем закройте вопрос - person user3629249; 28.02.2016