Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 3

Процессы запущенные вчера или ранее

30.01.2020, 19:48. Показов 3858. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу написать скрипт который выводит список пользователей (их логины, и ничего более), чьи процессы запущены вчера или ранее.

Думаю отсечь логины можно с помощью cut or awk, но вот большая проблема это с процессами.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2020, 19:48
Ответы с готовыми решениями:

Qt приложение отображающее запущенные процессы
Как используя инструменты Qt 5.3+ реализовать приложение отображающее запущенные процессы в виде списка. По клику на элементе списка нужно...

Как просмотреть все запущенные процессы
Как просмотреть все запущеные процессы через C#? Которые даже скрыты например руткитты

Вывести запущенные процессы на удаленном пк в сети
Добрый день. Нашел проект в интернетеhttps://www.codemag.com/article/1309031/Listing-Processes-Running-on-a-Computer, который выводит все...

26
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
30.01.2020, 21:11
Bash
1
ps -eo start=,user= --sort=user | uniq -f1 | sed -n 's/^[[:alpha:]].*\s\+//p'
1
0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 3
31.01.2020, 11:16  [ТС]
Спасибо большое, а можете пожалуйста рассказать что делает регулярное выражение в sed?
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
31.01.2020, 13:43
Ankodo,

Bash
1
ps -eo 'user,etime' | awk '$2 ~ /-/ {print $1}'
2
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
31.01.2020, 17:34
Лучший ответ Сообщение было отмечено Ankodo как решение

Решение

Ankodo, Главная фишка в форматированном выводе времени старта процесса
в команде ps -o start. Если команды запущены сегодня то выводится время "HH:MM:SS" (часы:минуты:секунды)
А если процессы стартовали вчерашним числом и ранее, то есть до 00:00 то формат вывода меняется на " Mmm dd" (абревиатура месяца и день)
Я кстати допустила ошибку полагая что строка начинается не с пробела а с символа названия месяца. Регулярка
в седе обрабатывает только те строки которые (в новом варианте) будут начинатся с пробела (с последующей абривиатурой месяца)
ну и вырезает эту часть оставляя только имя владельца процесса
Bash
1
ps -eo start=,user= --sort=user | uniq -f1 | sed -n 's/^\s\+.*\s\+//p'
Добавлено через 3 часа 17 минут
В моем распоряжении нет дивайса работающего продолжительное время, поэтому без проверки
я помоему допустила еще одну ошибку, команда uniq -f1 может украсть часть нужного вывода
в продакшн такая строчка
Bash
1
ps -eo start=,user= --sort=user | sed -n 's/^\s.*\s//p' | uniq
1
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
31.01.2020, 17:48
Да, вот проверила на онлайн сервисе
Миниатюры
Процессы запущенные вчера или ранее   Процессы запущенные вчера или ранее  
1
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
31.01.2020, 19:39
Лучший ответ Сообщение было отмечено Ankodo как решение

Решение

Kukstyler,
Bash
1
ps -eo 'user,etime' | awk '$2 ~ /-/ {print $1}' | sort -u
В моем примере тоже --sort лишняя если вместо uniq использовать sort -u
2
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
31.01.2020, 21:27
nezabudka, я про фильтровку вообще забыл
0
0 / 0 / 0
Регистрация: 24.12.2018
Сообщений: 3
31.01.2020, 21:45  [ТС]
nezabudka

А как здесь мы отбираем то что было вчера или ранее?
я понял что формат вывода меняется если это случилось до 00:00, и поэтому мы как-то через sed это делаем?

Не по теме:

я не могу найти как ответить на сообщение упомянув пользователя. HELP ME PLZ

0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
31.01.2020, 22:21
Цитата Сообщение от Ankodo Посмотреть сообщение
А как здесь мы отбираем то что было вчера или ранее?
По условию задачи мы отбираем процессы запущенные вчера или ранее и все, это все что нам нужно
Это легко фильтруется через изменение формата вывода. Мы фактически не проверяем саму дату,
а фиксируем изменение формата. Именно изменение формата и дает нам возможность без явного
сопоставления даты получать результат
sed просто проверяет начинается ли строка с пробела, если да то он обрабатывает наш файл потому что он
стартовал вчера или ранее и удаляет этот временной маркер оставляя имя владельца процесса
Вот два примера вывода сегодняшнего процесса и вчерашнего
Bash
1
2
08:04:22 user
 Jan 30 user2
Скопируйте и поместите эти строчки в файл, затем выполните
Bash
1
sed -n '/^\s/p' file
\s - любой пробельный символ
^ - начало строки
а потом так
Bash
1
sed -n 's/^\s.*\s//p' file
В скрипте Kukstyler, происходят аналогичные процессы только там строка фильтруется по символу дефиса
появляющемуся в формате времени в процессах запущенных днем ранее и более
Bash
1
$2 ~ /-/
1
505 / 158 / 49
Регистрация: 27.02.2016
Сообщений: 818
03.02.2020, 04:08
nezabudka, а стак говорит вроде что правильнее lstart отфортматировать в ISO дату и уже сравнивать


https://unix.stackexchange.com... /ps-output


Code
1
2
ps -eo lstart,pid,cmd --sort=start_time | awk '{ 
       cmd="date -d\""$1 FS $2 FS $3 FS $4 FS $5"\" +\047%Y-%m-%d %H:%M:%S\047";        cmd | getline d; close(cmd); $1=$2=$3=$4=$5=""; printf "%s\n",d$0 }'
что вы по этому поводу скажете
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
03.02.2020, 08:44
skouzmine, Не вижу необходимости здесь что то сравнивать,
достаточно того что утилита ps дает возможность просто детерминировать
необходимый временной интервал по изменению вывода формата.
Цитата Сообщение от skouzmine Посмотреть сообщение
правильнее
Не нашла в ссылке этому подтверждения.
Цитата Сообщение от skouzmine Посмотреть сообщение
и уже сравнивать
С чем предлагаете сравнивать? А лучше покажите на примере.
Результат работы вашей программы, удовлетворяет условию поставленной задачи?
0
 Аватар для volodin661
6677 / 2270 / 346
Регистрация: 10.12.2013
Сообщений: 7,839
03.02.2020, 11:28
Цитата Сообщение от skouzmine Посмотреть сообщение
что вы по этому поводу скажете
я не Незабудка, но скажу по этому поводу,
что интересно попробовать для сравнения и другой инструмент, имеющийся сегодня.
Принципиально другой.
Принципом тут является то, что пользователю для окончательной обработки результата предоставляются не строки текста,
а список об'ектов и, соответственно, способом обработки являются не утилиты для работы с текстом ( sed, awk, perl etc ),
а возможности манипуляции с об'ектами в OO-парадигме ( коллекции, свойства, методы ).

Разумеется, я говорю о pwsh.

Промежуточные результаты обработки в pwsh передаются тоже по трубе '|', но это другая труба, об'ектная.

Итак, надо найти 'Процессы запущенные вчера или ранее'.

Кликните здесь для просмотра всего текста
Аналогом утилиты ps в pwsh является Get-Process ( алиас: gps ).
gps возвращает коллекцию об'ектов, поэтому первая задача - найти какое именно свойство возвращаемых об'ектов отвечает за 'Время запуска'.
В предположении, что данное свойство, скорее всего, содержит в своём имени слово Time, попытаемся найти, как оно точно называется:
PowerShell
1
Get-Process | Get-Member  | grep Time
или покороче
PowerShell
1
gps|gm|grep time
Code
1
2
3
4
5
6
7
GetLifetimeService         Method         System.Object GetLifetimeService()
InitializeLifetimeService  Method         System.Object InitializeLifetimeService()
ExitTime                   Property       datetime ExitTime {get;}
PrivilegedProcessorTime    Property       timespan PrivilegedProcessorTime {get;}
StartTime                  Property       datetime StartTime {get;}
TotalProcessorTime         Property       timespan TotalProcessorTime {get;}
UserProcessorTime          Property       timespan UserProcessorTime {get;}
StartTime Property datetime StartTime {get;}
Свойство StartTime - явно то, что нам надо и это свойство является об'ектом datetime.
Об'ект DateTime в контексте нашей задачи получить вчерашнюю дату/время, чтобы сравнить со StartTime, нам вернёт Get-Date.
смотрим свойства:
PowerShell
1
Get-Date | gm
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   TypeName: System.DateTime
Name                 MemberType     Definition
----                 ----------     ----------
Add                  Method         datetime Add(timespan value)
AddDays              Method         datetime AddDays(double value)
AddHours             Method         datetime AddHours(double value)
AddMilliseconds      Method         datetime AddMilliseconds(double value)
AddMinutes           Method         datetime AddMinutes(double value)
AddMonths            Method         datetime AddMonths(int months)
AddSeconds           Method         datetime AddSeconds(double value)
AddTicks             Method         datetime AddTicks(long value)
AddYears             Method         datetime AddYears(int value)
CompareTo            Method         int CompareTo(System.Object value), int CompareTo(datetime value), int IComparable.CompareTo(System.Object obj), int IComparable[datetime].Co…
Equals               Method         bool Equals(System.Object value), bool Equals(datetime value), bool IEquatable[datetime].Equals(datetime other)
GetDateTimeFormats   Method         string[] GetDateTimeFormats(), string[] GetDateTimeFormats(System.IFormatProvider provider), string[] GetDateTimeFormats(char format), string…
GetHashCode          Method         int GetHashCode()
GetObjectData        Method         void ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
GetType              Method         type GetType()
...
Свойство Yesterday не наблюдается, однако методы
Add
AddDays
AddHours
AddMilliseconds
AddMinutes
AddMonths
AddSeconds
AddTicks
AddYears
явно сгодятся для арифметики дат.
проверяем:
PowerShell
1
2
$today = Get-Date
$today.AddDays(1)
Code
1
Tuesday, February 4, 2020 10:22:35 AM
и это 100% завтра
PowerShell
1
$today.AddDays(-1)
Code
1
Sunday, February 2, 2020 10:22:35 AM
и это 100% вчера

PowerShell
1
$yesterday = Get-Date.AddDays(-1)
Так то оно, конечно, так, но это мы просто вычли 24 часа от текущего времени,
а 'вчера' начинается с 00 часов 00 минут вчерашнего дня; время надо обнулить,
поэтому точка отсчета для сравнения со StartTime будет выглядеть так:
PowerShell
1
$start = Get-Date -Day $yesterday.Day -Month $yesterday.Month -Year $yesterday.Year -Hour 00 -Minute 00 -Second 00
( выглядит всё длинно и утомительно для пальцев, но фактически пальцам пофиг, потому что клавиша <TAB> при наборе делает за нас всю работу )

Пожалуй, даже интереснее оформить вычисление 'вчера' в виде функции
PowerShell
1
function yday { $y = (Get-Date).AddDays(-1); Get-Date -Day $y.Day -Month $y.Month -Year $y.Year -Hour 00 -Minute 00 -Second 00 -Millisecond 00 }
Функция эта весьма полезна, поэтому её определение можно сохранить в пользовательском профайле и она будет всегда под руками.


PowerShell
1
gps -IncludeUserName | where StartTime -le (yday) | select username  -Unique | Sort-Object UserName
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
UserName
--------
_appleevents
_assetcache
_captiveagent
_coreaudiod
_ctkd
_datadetectors
_displaypolicyd
_distnote
_gamecontrollerd
_hidd
_iconservices
_locationd
_mdnsresponder
_netbios
_networkd
_nsurlsessiond
_nsurlstoraged
_softwareupdate
_spotlight
_usbmuxd
_windowserver
PetyaPupkin
root
а теперь сравним с Незабудкой:
PowerShell
1
ps -eo 'user,etime' | awk '$2 ~ /-/ {print $1}' | sort -u
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
_appleevents
_captiveagent
_coreaudiod
_displaypolicyd
_distnote
_hidd
_locationd
_mdnsresponder
_netbios
_networkd
_nsurlsessiond
_usbmuxd
_windowserver
PetyaPupkin
root
Опа! Где же часть процессов ?
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
03.02.2020, 11:48
Цитата Сообщение от volodin661 Посмотреть сообщение
Где же часть процессов ?
Потухли

Ну а если серьёзно, что Вы имеете в виду?, что:
  1. ps не умеет доставать процессы?
  2. awk не умеет распознавать тире и вывести строку?
  3. sort не умеет отсеивать дубликаты?
0
 Аватар для volodin661
6677 / 2270 / 346
Регистрация: 10.12.2013
Сообщений: 7,839
03.02.2020, 11:50
Я пока не знаю причины, не разбирался ещё,
просто показал результат.
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
03.02.2020, 11:54
volodin661,

-le = less or equal :

PowerShell
1
where StartTime -le (yday)
А в варианте nezabudka (и моём), все кроме сегодняшних (greater than today)
0
 Аватар для volodin661
6677 / 2270 / 346
Регистрация: 10.12.2013
Сообщений: 7,839
03.02.2020, 12:51
Цитата Сообщение от Kukstyler Посмотреть сообщение
(greater than today)
Контрамоция ? Бенджамин Баттон ?
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
03.02.2020, 13:55

Не по теме:

pwsh моложе, он просто обязан быть безоговорочно лучшим, но только в разделе PowerShell...
Как говорила баба Шура, "каждый сверчок знай свой шесток"
А уж бабуля знала толк в деликатности.


0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
03.02.2020, 14:06
volodin661,
-le (yday) = вчера либо младше! То есть вчерашние + сегодняшние.
greater than today = старше сегодншних, то есть ВСЕ, кроме сегодняшних.

Разницу улавливаете?
0
 Аватар для volodin661
6677 / 2270 / 346
Регистрация: 10.12.2013
Сообщений: 7,839
03.02.2020, 17:22
Kukstyler, а чем измеряется время ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2020, 17:22
Помогаю со студенческими работами здесь

В диспетчере задач висят процессы запущенные пользователем
Calc.exe*32 mspaint.exe*32 svchost.exe*32 Также заменяются все значки на ярлыки на съемных носителях. Интернет на компьютере отключен!

Не получается сгруппировать запущенные процессы по ключу SID
Задача простая - разделить запущенные в системе процессы на системные и запущенные пользователем. Пытаюсь отфильтровать хотя бы...

Завершить все процессы, запущенные из указанной папки
Подскажите пожалуйсто! Нужно завершить все процессы звпущенные из указанной папки прим c:/temp Как завершить указанный процесс понял...

Как в разные label записать запущенные активные процессы?
Делая, одну программу и мне надо вывести все активные процессы на форму. Вот код private void button7_Click(object sender, EventArgs e) ...

Можно ли вместо поиска окон (FindWindow) искать запущенные процессы?
Как это делает, например tasklist или taskkill в командной строке винды


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru