Как определить имя процесса приложения?

Это ситуация:

Работая над (следующей версией) редактора быстрого списка Unity, я хотел бы добавить надежный способ «перезапуска» значков запуска. Для этого мне нужно убрать значок (редактирование gsettings) и заменить его на ту же позицию. Пока проблем нет. Однако, если рассматриваемое приложение работает, пользователь, возможно, потеряет данные, так как приложение закроется, когда его значок будет удален из модуля запуска. Мне нужен надежный способ найти имя процесса приложения, позволить редактору проверить список запущенных процессов, если приложение запущено, и отправить пользователю предупреждение о том, что значок нельзя перезапустить , если Приложение запущено.

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

Хотя этот метод, похоже, хорошо работает со всеми приложениями, на которых я его тестировал, у меня есть ощущение, что должен быть более простой способ решения проблемы" все в одном " способ ...

Есть ли?

Также приветствуются предложения поймать более исключительные ситуации!

13
задан 6 January 2013 в 00:45

2 ответа

Команда xprop (за которой следует alt-tab в соответствующее окно приложения, затем один раз щелкните в окне), похоже, помогает мне.

0
ответ дан 6 January 2013 в 00:45

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

Upstart должен иметь дело с точно такой же проблемой, чтобы отслеживать, все ли еще работают демоны, и авторам заданий upstart приходится указывать детали (количество вилок) для отслеживания upstart. Учитывая, что выскочка не может справиться с этим без помощи, я не думаю, что вы тоже можете. А выскочка даже контролирует то, как запускаются процессы, и я не думаю, что вы здесь.

Я думаю, лучшее, что вы можете сделать, это то, что вы уже делаете. Рассмотрение /proc/<pid>/stat и /proc/<pid>/cmdline является достаточно общим способом, но все же не уловит каждый случай. Команда pgrep оборачивает это. Если вы еще не используете pgrep, взгляните на pgrep manpage , чтобы найти варианты, с которыми вы можете сравнивать.

Сказав все это, я не уверен, что вам действительно нужно делать это в первую очередь. Если вы не можете отследить процесс, тогда я не вижу, как Unity может это сделать. Разве лучше не было бы устранить сбои приложения? Я хотел бы изучить детали того, почему ваши приложения терпят крах (наверняка, это где-то ошибка?), А не пытаться обойти это, как вы описали. Интересно, влияет ли это только на приложения, поддерживающие Unity, которые обращаются к Unity для дополнительной функциональности через DBus ?

0
ответ дан 6 January 2013 в 00:45

Другие вопросы по тегам:

Похожие вопросы: