Как проверить, какие процессы все еще активны после выхода из сеанса пользователя

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

Я уже пытался, например, регистрировать, какие процессы все еще активны после выхода из сеанса определенного пользователя, имея активную учетную запись администратора в то же время, что и другая учетная запись, так что, пока другая учетная запись выходит из системы, учетная запись администратора будет регистрировать активность процесса с помощью:

top > ~/top.txt

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

top strange output

И хотя я могу выделить это отдельно и, взглянув на фактический пример работы top в моем CLI, я могу сказать, что это за биты, но очень трудно сказать, что я должен делать, плюс я не знаю, в какой момент, что случилось, я не знаю, если один из выходных данных в файле до выхода из системы, или после или в какой-то момент, и это действительно очень трудно читать.

Поэтому мне интересно, есть ли способ лучше достичь того, чего я пытаюсь достичь? И если бы кто-нибудь мог дать мне какие-либо предложения относительно того, как я мог бы улучшить свои методы, или предложить какие-то новые методы ,

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


Информация об ОС:

Description:    Ubuntu 14.10
Release:    14.10
2
задан 14 April 2015 в 00:02

5 ответов

Вы на правильном пути: у Меня также был бы один пользователь, наблюдающий другой. Если бы top не дает Вам вывод, Вы хотите, я использовал бы ps aux в бесконечном цикле с 1 второй задержкой.

#!/bin/bash
# Example script for watching a logging off user
# This script is an answer to http://askubuntu.com/questions/608921/how-to-check-which-processes-are-still-active-after-a-user-session-has-logged-ou/608925#608925

# Copyright (c) 2015 Fabby

# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. See the GNU General Public License for more details.
# You DID NOT receive a copy of the GNU General Public License along with this program as the license is bigger then this program.

while true
do
  date   >> /tmp/watch-logoff.txt
  ps aux >> /tmp/watch-logoff.txt
  sleep 1
done

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

2
ответ дан 14 April 2015 в 00:02

Этот ответ Radu дает Вам полный обзор того, как выполнить конкретный сценарий после выхода из системы или завершения работы.

то, Что можно сделать, создают сценарий как это

#!/bin/bash
ps -u username > /home/yourusername/outputfile.txt

Тогда sudo chmod +x scriptname и добавляют строку

session-cleanup-script=/path/to/script к /etc/lightdm/lightdm.conf

Что касается завершения работы... Я верю во время выполнений завершения работы /etc/rc6.d/S20sendsigs, который отправляет сигналы уничтожения во все задания, Таким образом, можно хотеть выполнить тот сценарий с именем файла S10_scriptname для запуска, это перед этим sendsigs сценарий (вернитесь к ответу Radu для большего количества информации)

Редактирование: с 14,04, lightdm.conf не создается по умолчанию, следовательно Вы, возможно, должны создать этот файл в /etc/lightdm/lightdm.conf.d/ каталог с первой строкой, говоря [Seat Defaults]

2
ответ дан 14 April 2015 в 00:02

Используйте следующее для списка всех процессов какого-то конкретного пользователя:

$ ps -fu "username"

, Например:

$ ps -fu foobar

Для сохранения его в файле:

$ ps -fu foobar > ~/ps_foobar

Вот один лайнер, который может использоваться через cron или любой другой механизм повторения:

[[ $(ps -u foobar | wc -l) -gt 1 ]] && echo "user foobar has process running" || echo "user foobar has no process running"

Для проверки журналов при закрытии (так же, как может быть зарегистрирован):

tail -f /var/log/syslog  ## Run it prior to shutdown

Или просто читают файл /var/log/syslog в любое время, он содержит полностью занятую информацию, так будет легко понять.

1
ответ дан 14 April 2015 в 00:02

Можно выполнить htop от одной из tty консолей так, чтобы можно было зарегистрировать пользователя из xsession, но все еще поддержать открытый терминал (htop, лучше, чем главный и легче читать).

CTRL + ALT + F2 можно войти в систему текстовая сессия под различным именем пользователя оттуда и затем, использовать:

sudo htop

для запуска его. Используйте F6 и затем прокрутите до ПОЛЬЗОВАТЕЛЯ, использующего кнопку стрелки, и нажатие Входят . Это отфильтрует результаты пользователем облегчить читать в этих целях.

Для возврата к xsession нажмите CTRL + ALT + F7 и CTRL + ALT + F2 для возвращения к tty2 снова и т.д.

1
ответ дан 14 April 2015 в 00:02

Вы могли использовать ~./bash_logout, если это для того, когда пользователи выходят из системы (примечание, колотят оболочку, например, ssh). Но некоторые другие ситуации также описаны в статье/ответе ниже,

superuser.com: create-a-logoff-script-task-for-linux

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

, Если Вы хотели только выполнение PIDs пользователя, Вы могли бы также использовать ниже,

$ id -u username | xargs pgrep -U
0
ответ дан 14 April 2015 в 00:02

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

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