5

Я использую Ubuntu 10.10, и у меня есть программа Python (Mnemosyne), которая синхронизирует файлы данных с помощью Dropbox. Вот мой проблемный сценарий. Я оставляю программу работающей дома и иду на работу, но если я открываю программу на работе и работаю над ней, файл данных изменяется, и я теряю свой прогресс дома, когда выхожу (он автоматически сохраняет) при выходе.

Я думал, что смогу создать задание cron для автоматического закрытия Mnemosyne каждое утро, независимо от того, вспомнил я об этом или нет, но если я использую команду kill, она завершается без сохранения файла данных, и в результате получается файл tmp и сообщение об ошибке когда я перезапущу это. Есть ли лучший способ отправки сигнала на выход в эту программу, эмулируя меня нажав файл> выход из меню.

7 ответов7

4

По вашему описанию, я предполагаю, что это программа с графическим интерфейсом, работающая на X-сервере. Попробуйте wmctrl:

wmctrl -c "RegEx for Window Name"

Со страницы руководства:-c <WIN> Close the window <WIN> gracefully.

4

Попробуйте использовать для программы более низкий сигнал уничтожения, например 3 (SIGQUIT).

3

Как насчет запуска программы на домашнем экране, чтобы вы могли подключиться к ней на работе и полностью контролировать происходящее?

http://www.howtoforge.com/linux_screen

2

Есть ли man-страницы по мнемосине? Возможно, в документах есть команда close, которую вы можете использовать в своей работе cron.

1

Как правило, единственный способ закрыть программу - это сигнал. Как уже говорили другие, если он не отвечает должным образом на уничтожение по умолчанию (которое отправляет SIGTERM), он также вряд ли будет иметь надлежащий обработчик для других сигналов. Сигнала «добрее нежнее» нет. Все сигналы, кроме SIGKILL, обрабатывают процесс одинаково, запускают обработчик, если он есть, или убивают приложение.

Тем не менее, как приложение с графическим интерфейсом, существует очень малая вероятность того, что оно ссылается на библиотеку, которой вы можете управлять приложением. Вы можете попробовать посмотреть, можете ли вы отправлять ему сообщения с помощью dcop или d-bus. См. Http://dbus.freedesktop.org/doc/dbus-tutorial.html.

1

Правильный ответ на этот вопрос зависит от того, что поддерживает ваша программа. Хорошо функционирующая программа должна сохранять всю работу и корректно завершать работу при получении сигнала TERM, который используется по умолчанию для kill, поэтому я предполагаю, что это именно то, что вы пытались. Если программа не допускает этого и не предлагает другого способа, например, через сокет управления, вам может не повезти. В этом случае попробуйте использовать сеанс экрана или исправить программу или использовать другой.

1

Это сильно зависит от приложения. Если авторы mnemosyne не предвидели подобную ситуацию и специально не создали поведение "сохранить и выйти при получении сигнала X", то вы в значительной степени застряли с необходимостью манипулировать его пользовательским интерфейсом для достижения этой цели.

Однако, как уже предлагалось, лучшим решением, вероятно, было бы запустить mnemosyne в какой-либо форме утилиты совместного использования дисплея, чтобы вы могли получить доступ к одному и тому же сеансу из обоих мест, а не выключать его и перезапускать при каждом перемещении. VNC - это опция общего доступа к рабочему столу с графическим интерфейсом, с которой я больше всего знаком, но, вероятно, есть способ получить X, чтобы позволить вам делать это на уровне приложений (в отличие от всего рабочего стола), и в наши дни есть много других вариантов. который может работать лучше для вас.

Если бы это было приложение командной строки, screen прекрасно работал (я использую его ежедневно только для этой цели, предоставляя мне доступ к одному экземпляру mutt из разных мест), но я не думаю, что он обрабатывает приложения с графическим интерфейсом (страница man) не отображается для ссылки "GUI" или "X").

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .