Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Как убить процесс при переключении пользователя?  (Прочитано 2823 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Noisedsn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Доброго времени суток.

Такая ситуация: имеется компьютер с несколькими пользователями, которые переключаются туда-сюда. Также на компьютере настроен LIRC, запуск программ идет через демон процесс irexec, который сейчас поднимается нехитрым скриптиком:

#/bin/sh
killall irexec
irexec -d

Этот скрипт прописан в автозапуск гнома: "Система - Параметры - Сеансы".

Проблема в следующем: при переключении пользвателей запускается второй экземпляр irexec, но остается и уже запущенный, который тоже слушает команды с пульта и запускает плееры, пытается щелкать каналами тюнера в той, запущенной, но неактивной сессии.

Можно ли как-нибудь изменить скрипт запуска irexec, чтобы он убивался, или еще как-то деактивировался при выходе пользователя, а при повторном входе запускался снова?
« Последнее редактирование: 09 Марта 2009, 14:21:01 от Noisedsn »

Оффлайн Alie Alexandross

  • Старожил
  • *
  • Сообщений: 1576
    • Просмотр профиля
#!/bin/bash

_USER=$(whoami);
_TOP=$(top -u $_USER -n 1 | grep irexec | cut -b7-11);
kill $_TOP;
Если добавить скрипт в пост-сессию пользователя - тот должен убивать все irexec процессы..
Подпись автора jillsmitt истинна...

Оффлайн Noisedsn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Интересно. Правда, ваш пример у меня почему-то не заработал, наверное потому, что в выводе команды "top" процесса "irexec" нету, хотя  ps -aux показывает, что есть. Поэтому в лоб написал в  /etc/gdm/PostSession/Default строчку:

killall irexec;
Это убивает процессы при выходе пользователя из сессии. Но если, не выходя, переключиться на другого пользователя - по-прежнему запускается 2 irexec'а.

В любом случае, спасибо, разбираюсь дальше.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Noisedsn, а если запускать автоматом от рута при старте системы, как и положено демонам?

Оффлайн Noisedsn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
ArcFi, конкретно этот демон, наверное привязан к пользователю. Запустить его общим для всех, через /etc/init.d у меня не получилось. Вернее, он-то запускался, но команды пользователя не выполнял.

Оффлайн Alie Alexandross

  • Старожил
  • *
  • Сообщений: 1576
    • Просмотр профиля
По какому принципу осуществляется смена пользователя? Если я правильно понимаю - просто регистрируется новый пользователь, при этом старый остаётся по прежднему активным. По аналогии - подключение второго терминала к серверу...

В таком случае можно попробовать изменить скрипт запускающий демона при ЛОГИНЕ пользователя на что-то подобное:
#!/bin/bash

_TOP=$(ps aux | grep irexec | grep -v grep | cut -b10-14);

if [ ! "$_TOP" = "" ]; then
      kill $_TOP;
      irexec -d;
else
      irexec -d;
fi

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

Вопрос в другом: действительно-ли вторая строка в скрипте убивает демона?
#/bin/sh
killall irexec
irexec -d
Можете это проверить?

P.S. Редактирую скрипт "на лету"...
P.P.S. Отредактирован. В login сей скрипт, правда, не добавляла, но когда запускала его из-под sudo - удачно распознал и кильнул все запущенные у трёх пользователей Midnight Commander -ы.
« Последнее редактирование: 09 Марта 2009, 19:17:48 от Alie Alexandross »
Подпись автора jillsmitt истинна...

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Noisedsn, имхо конечно, но я бы на вашем месте погуглил мануал по конфигурированию lirc именно как демона, работающего от рута.
Во-первых, такой подход идеологически более правилен, а во-вторых, решает обозначенную в хэдпосте проблему.

Оффлайн Noisedsn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Alie Alexandross, да если разлогинить одного пользователя, а потом залогиниться под вторым - то работает просто со строкой killall irexec в PostSession. Проблемы начинаются если залогинены сразу оба.

В скрипте
#/bin/sh
killall irexec
irexec -d
вторая строчка убивает только демона, запущенного от имени пользователя. Чужой не убивается, конечно. Изначально был только один пользователь и эта строчка была нужна только для того, чтобы убивать лишний процесс, например при перезапуске иксов.

В принципе, вполне хватит решения с убиением своего процесса при выходе из сеанса в PostSession скрипте. Нужно только следить, чтобы одновременно не было залогинено двух пользователей :)

Оффлайн Alie Alexandross

  • Старожил
  • *
  • Сообщений: 1576
    • Просмотр профиля
Что-ж, старалась по мере своих весьма скромных познаний :)
Подпись автора jillsmitt истинна...

Оффлайн Noisedsn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
ArcFi, LIRC, а вернее lircd работает именно как демон от рута, а вот irexec, который запускает программы нормально работает только от текущего пользователя. Мануалы я честно искал, но ничего подходящего не нашел. Наблюдал те же глюки, когда залогинено два пользователя, и один, активный в данный момент пытается запустить, tvtime, например, а он запускается у второго, залогиненного, но неактивного...

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

Alie Alexandross, спасибо и не скромничайте :)
« Последнее редактирование: 09 Марта 2009, 19:56:36 от Noisedsn »

 

Страница сгенерирована за 0.024 секунд. Запросов: 20.