Compare commits

..

17 Commits

Author SHA1 Message Date
Jakob P. Liljenberg 60f95a1a74
Update README.md 2022-01-13 16:54:23 +01:00
aristocratos 4bf71e6816
Merge pull request #181 from lwhsu/freebsd
Update FreeBSD install instructions
2020-08-10 18:05:06 +02:00
aristocratos e7648ffdad
Merge pull request #184 from wigust/guix
Added install instructions for Guix
2020-08-10 18:02:59 +02:00
Oleg Pykhalov 9a0e464188
Added install instructions for Guix 2020-08-10 18:56:37 +03:00
Li-Wen Hsu 2725b77917
Update FreeBSD install instructions 2020-08-08 22:42:17 +08:00
aristocratos 9f8a133493 Get bpytop! 2020-08-07 14:50:37 +02:00
aristocratos d2eb76ea5b Added links to bpytop 2020-08-02 20:30:40 +02:00
aristocratos 89bf185f6b
Merge pull request #175 from elboletaire/master
Remove extra space in debian prerm script
2020-07-22 13:12:01 +02:00
Òscar Casajuana ae8d7a9266
Remove extra space 2020-07-22 12:00:45 +02:00
aristocratos 071cde4a9c Added info for bug fixing [skip ci] 2020-07-20 12:44:54 +02:00
aristocratos c76573ac7d v0.9.25 Fix for crash on linux when 9p filesystem is present 2020-07-20 12:35:57 +02:00
Josh faaf3ca047
ignore 9p filesystems to fix hang on Crostini
This patch prevents bashtop from hanging when running in a Crostini container.  Crostini (Linux containers on ChromeOS) use the 9P filesystem for communication between various VMs and containers.
2020-07-19 03:04:46 -05:00
aristocratos b8cb8d34b1 v0.9.24 Fixes for OsX 2020-07-14 19:40:54 +02:00
aristocratos 4f7b332b15 v0.9.24 Fixes for OsX 2020-07-14 19:38:31 +02:00
aristocratos 70e844aa26 Fixed error handling for malformed osx-cpu-temp output 2020-07-14 17:51:36 +02:00
aristocratos 69232ceb0d Fixed psutil script crash on OSX 2020-07-14 17:34:24 +02:00
aristocratos 497041d748 Added psutil version info field [ci skip] 2020-07-13 11:30:27 +02:00
8 changed files with 71 additions and 24 deletions

View File

@ -27,11 +27,12 @@ assignees: aristocratos
- Bashtop version:
- (Linux) Linux distribution and version:
- (Linux) Data collection type (/proc or psutil):
- Psutil version: `python3 -c "import psutil; print(psutil.version_info)"` (version 5.7.0 or above is required):
- (OSX/FreeBSD) Os release version:
- Terminal used:
- Font used:
- Bash version, "bash --version" (version 4.4 or above is required):
- Locales: output of "locale -v"
- Bash version, `bash --version` (version 4.4 or above is required):
- Locales: output of `locale -v`
**Additional context**

View File

@ -1,5 +1,14 @@
# Changelog
## v0.9.25
* Fixed: Crash when using "/proc" data collection and filesystem type is 9p, by @bolapara
## v0.9.24
* Fixed: Psutil script crash on OSX
* Fixed: Error handling for malformed osx-cpu-temp output
## v0.9.23
* Fixed: kill/terminate/interrupt process not working in OsX and FreeBSD

View File

@ -6,6 +6,8 @@
* Is it a requested change or feature?
* If not, open a feature request to get feedback before making a pull request.
* If it's a fix for a unreported bug, make a bug report and link the pull request.
* Split up multiple unrelated changes in multiple pull requests.
* [Shellcheck](https://github.com/koalaman/shellcheck) your work. Current shellsheck exceptions at the beginning of [bashtop](bashtop).

View File

@ -1,4 +1,4 @@
#!/bin/bash
echo -e "[\033[1;33m removing packet from the system \033[0m]"
echo -e "[\033[1;33m removing packet from the system \033[0m]"

BIN
Imgs/bpytop.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -12,13 +12,24 @@
[![Sponsor](https://img.shields.io/badge/-Sponsor-red?logo=github)](https://github.com/sponsors/aristocratos)
[![Coffee](https://img.shields.io/badge/-Buy%20me%20a%20Coffee-grey?logo=Ko-fi)](https://ko-fi.com/aristocratos)
### C++ Version
##### 18 September 2021
![btop++](https://raw.githubusercontent.com/aristocratos/btop/main/Img/logo.png)
The C++ version of bashtop - btop++ is available.
Get it at https://github.com/aristocratos/btop
#
## Index
* [Documents](#documents)
* [Description](#description)
* [Features](#features)
* [Themes](#themes)
* [Upcoming](#upcoming) (Python port)
* [Support and funding](#support-and-funding)
* [Prerequisites](#prerequisites)
* [Dependencies](#dependencies)
@ -28,6 +39,7 @@
* [TODO](#todo)
* [License](#license)
## Documents
#### [CHANGELOG.md](CHANGELOG.md)
@ -65,13 +77,6 @@ User created themes should be placed in `$HOME/.config/bashtop/user_themes` to b
Let me know if you want to contribute with new themes.
## Upcoming
#### Python port: bpytop
Currently working full time on this during my vacation :)
I'm aiming to have a first release by end of July.
## Support and funding
Bug fixes and updates might be slow during normal workdays since I work full time as an industrial worker and don't have much time or energy left during the week.
@ -203,9 +208,7 @@ brew install osx-cpu-temp
>Install with pkg and pip
``` bash
sudo pkg install coreutils gsed python3 git
sudo python3 -m ensurepip
sudo pip3 install psutil
sudo pkg install coreutils gsed git py37-psutil
```
#### Manual installation Linux, OSX and FreeBSD
@ -224,6 +227,16 @@ sudo make install
sudo make uninstall
```
#### FreeBSD package
Available in [FreeBSD ports](https://www.freshports.org/sysutils/bashtop/)
Install pre-built pacakge
``` bash
sudo pkg install bashtop
```
#### Arch based
Available in the AUR as [bashtop-git](https://aur.archlinux.org/packages/bashtop-git/)
@ -250,6 +263,16 @@ Or use quick installation:
sudo ./build --remove
```
#### Guix based
Available in [official Guix repository](https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/admin.scm) since 6bbd0fd2
>Installation
``` bash
guix install bashtop
```
#### Ubuntu based
Available in [official Ubuntu repository](https://launchpad.net/ubuntu/+source/bashtop) since Ubuntu 20.10

21
bashtop
View File

@ -93,7 +93,7 @@ banner=(
"██╔══██╗██╔══██║╚════██║██╔══██║ ██║ ██║ ██║██╔═══╝ "
"██████╔╝██║ ██║███████║██║ ██║ ██║ ╚██████╔╝██║ "
"╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ")
declare version="0.9.23"
declare version="0.9.25"
#* Get latest version of BashTOP from https://github.com/aristocratos/bashtop
@ -2129,8 +2129,10 @@ collect_cpu_temps() { #? Collect cpu temperatures
#* Get CPU package temp for Rapberry Pi cpus and for OSX
elif [[ $sensor_comm != "sensors" && -n ${misc_var} ]]; then
cpu[temp_0]="${misc_var#temp=}"
cpu[temp_unit]="°${cpu[temp_0]:(-1)}"; cpu[temp_0]=${cpu[temp_0]%.*}; if [[ ${cpu[temp_0]::1} == "+" ]]; then cpu[temp_0]=${cpu[temp_0]#+}; fi
cpu[temp_high]="75"; cpu[temp_crit]=$((cpu[temp_high]+10))
cpu[temp_unit]="°${cpu[temp_0]:(-1)}"; cpu[temp_0]=${cpu[temp_0]%%.*}; if [[ ${cpu[temp_0]::1} == "+" ]]; then cpu[temp_0]=${cpu[temp_0]#+}; fi
if [[ -z ${cpu[temp_high]} ]]; then
cpu[temp_high]="75"; cpu[temp_crit]=$((cpu[temp_high]+10))
fi
#* Copy cpu temp to cores
for((i=1;i<=threads;i++)); do
@ -2233,7 +2235,7 @@ collect_mem() { #? Collect memory information from "/proc/meminfo"
if ! py_command -a df_array "get_disks(exclude='squashfs'${filtering})"; then psutil_disk_fail=1; psutil_on="false"; fi
fi
if [[ $psutil_on == false ]]; then
readarray -t df_array < <(${df} -x squashfs -x tmpfs -x devtmpfs -x overlay 2>/dev/null || true)
readarray -t df_array < <(${df} -x squashfs -x tmpfs -x devtmpfs -x overlay -x 9p 2>/dev/null || true)
fi
for df_line in "${df_array[@]:1}"; do
line_array=(${df_line})
@ -5062,11 +5064,14 @@ def get_proc(sorting='cpu lazy', tree=False, prog_len=0, arg_len=0, search='', r
print(f"{'Pid:':>7} {'Program:':<{prog_len}}", f"{'Arguments:':<{arg_len-4}}" if arg_len else '', f"{'Threads:' if arg_len else ' Tr:'} {'User:':<9}Mem%{'Cpu%':>11}", sep='')
for p in sorted(psutil.process_iter(['pid', 'name', 'cmdline', 'num_threads', 'username', 'memory_percent', 'cpu_percent', 'cpu_times', 'create_time'], err), key=lambda p: eval(sort_cmd), reverse=reverse):
if p.info['name'] == 'idle':
if p.info['name'] == 'idle' or p.info['name'] == err or p.info['pid'] == err:
continue
if p.info['cpu_times'] == err:
if p.info['cmdline'] == err:
p.info['cmdline'] = ""
if p.info['username'] == err:
p.info['username'] = "?"
if p.info['num_threads'] == err:
p.info['num_threads'] = 0
p.info['cmdline'] = ''
if search:
found = False
for value in [ p.info['name'], ' '.join(p.info['cmdline']), str(p.info['pid']), p.info['username'] ]:
@ -5123,6 +5128,8 @@ def proc_tree(width: int, sorting: str = 'cpu lazy', reverse: bool = True, max_l
if getinfo and cont:
if getinfo['cpu_times'] == err:
getinfo['num_threads'] = 0
if p.info['username'] == err:
p.info['username'] = "?"
cpu = getinfo['cpu_percent'] if proc_per_cpu else (getinfo['cpu_percent'] / psutil.cpu_count())
print(f"{getinfo['num_threads']:>4} " if getinfo['num_threads'] < 1000 else '999> ',
f"{getinfo['username']:<9.9}" if len(getinfo['username']) < 10 else f"{getinfo['username'][:8]:<8}+",

View File

@ -226,11 +226,14 @@ def get_proc(sorting='cpu lazy', tree=False, prog_len=0, arg_len=0, search='', r
print(f"{'Pid:':>7} {'Program:':<{prog_len}}", f"{'Arguments:':<{arg_len-4}}" if arg_len else '', f"{'Threads:' if arg_len else ' Tr:'} {'User:':<9}Mem%{'Cpu%':>11}", sep='')
for p in sorted(psutil.process_iter(['pid', 'name', 'cmdline', 'num_threads', 'username', 'memory_percent', 'cpu_percent', 'cpu_times', 'create_time'], err), key=lambda p: eval(sort_cmd), reverse=reverse):
if p.info['name'] == 'idle':
if p.info['name'] == 'idle' or p.info['name'] == err or p.info['pid'] == err:
continue
if p.info['cpu_times'] == err:
if p.info['cmdline'] == err:
p.info['cmdline'] = ""
if p.info['username'] == err:
p.info['username'] = "?"
if p.info['num_threads'] == err:
p.info['num_threads'] = 0
p.info['cmdline'] = ''
if search:
found = False
for value in [ p.info['name'], ' '.join(p.info['cmdline']), str(p.info['pid']), p.info['username'] ]:
@ -287,6 +290,8 @@ def proc_tree(width: int, sorting: str = 'cpu lazy', reverse: bool = True, max_l
if getinfo and cont:
if getinfo['cpu_times'] == err:
getinfo['num_threads'] = 0
if p.info['username'] == err:
p.info['username'] = "?"
cpu = getinfo['cpu_percent'] if proc_per_cpu else (getinfo['cpu_percent'] / psutil.cpu_count())
print(f"{getinfo['num_threads']:>4} " if getinfo['num_threads'] < 1000 else '999> ',
f"{getinfo['username']:<9.9}" if len(getinfo['username']) < 10 else f"{getinfo['username'][:8]:<8}+",