Вы можете использовать учет процессов BSD. lastcomm
не сообщает прошедшее время, но, по крайней мере, в Linux, оно хранится в базе данных учета и может быть запрошено с помощью команды dump-acct
.
$ sudo accton on # activate process accounting
$ sleep 5.23
$ sudo dump-acct /var/log/account/pacct | grep '^sleep'
sleep |v3| 0.00| 0.00| 523.00| 10031| 10031| 14632.00| 0.00| 15261 416|Mon Jun 2 17:09:37 2014
Истекшее время - это 5-е поле (выше 523 сантиметров).
Третье и четвертое поля - это время пользователя и системное время, то есть время, которое ЦП (любой ЦП) потратил на выполнение этого процесса (любого потока этого процесса).
Обратите внимание, что (по крайней мере, в Linux) процесс учитывается, когда он (любой его поток) умирает, и как имя процесса, которое он имел, когда он умер. Это означает, что, например, в:
sh -c 'sleep 4; exec sleep 5'
Один процесс выполняет sh
, а затем разветвляет другой процесс для выполнения сна 4
, а затем первый процесс выполняет сна 5
( поэтому меняем название). В базе данных бухгалтерского учета мы получаем:
sleep |v3| 0.00| 0.00| 400.00| 1000| 1000| 10320.00| 0.00| 28867 28866|Tue Jun 3 07:45:52 2014
sleep |v3| 0.00| 0.00| 900.00| 1000| 1000| 10320.00| 0.00| 28866 28801|Tue Jun 3 07:45:52 2014
Это процесс, который запускает sh
, а затем сон 5
учитывается как сон
в течение 900 сантиметров. -секунды, и нет никакого упоминания о sh
.
Для firefox
(сильно многопоточное приложение), к сожалению, в моем случае я вижу очень короткие промежутки времени, потому что процесс учитывается, когда умирает один короткоживущий его поток.
Этого можно добиться, добавив echo "" в середине команд, где требуется пробел.
Here are some example.
Пример:
df | fgrep '/dev/'; echo ""; free -h
выход
tmpfs 16334344 55772 16278572 1% /dev/shm
total used free shared buff/cache available
Mem: 31G 4.0G 21G 346M 6.0G 26G
Swap: 15G 2.3M 15G
Пример:
echo "==================" ; echo "This is output of df"; echo "==================" ;df | grep '/dev/shm' ; echo ""; echo "==================" ; echo "This is output of Free"; echo "==================";free -h
Выход:
==================
This is output of df
==================
tmpfs 16334344 55772 16278572 1% /dev/shm
==================
This is output of Free
==================
total used free shared buff/cache available
Mem: 31G 4.0G 21G 359M 6.0G 26G
Swap: 15G 2.3M 15G
Instead of displaying whole df command output i Wrote below script to find only if disk space crosses threshold (here i assuming threshold as 90%) and also included current memory usage percentage details
Here is the code
df -Ph| awk 'NR>1'| sed "s/%//g"| awk '($(NF-1) >90){print "Disk space utilized is" " "$(NF-1)"%" " for partition" " "$NF}'|sed '1i Below are partition details of hosts where disk utilized crossed 90%\n'| sed '$s/.*/&\n=============================================================================/g';free | awk '/Mem/{print $0}'| awk '{print $3/$2*100}'| sed '1i below are current memory usage percentage of host'
Sample output
Below are partition details of hosts where disk utilized crossed 90%
Disk space utilized is 100% for partition /snap/gnome-system-monitor/51
Disk space utilized is 100% for partition /snap/gtk-common-themes/1122
Disk space utilized is 100% for partition /snap/core/6531
Disk space utilized is 100% for partition /snap/gnome-calculator/260
Disk space utilized is 100% for partition /snap/gnome-logs/37
Disk space utilized is 100% for partition /snap/gtk-common-themes/818
=============================================================================
below are current memory usage percentage of host
39.2084