16 Commits

Author SHA1 Message Date
9e57b5c3f4 Generate an appropriate shebang line for MakeHeader script
Use configure.ac to handle platform differences where some
build hosts have only a python3, or only python, binary.

Related to https://github.com/htop-dev/htop/pull/6
2020-08-23 11:24:52 +10:00
b3aef4ea3a Revert "MakeHeader.py: use python3 shebang"
This reverts commit 40ac7a88af.
as it causes build failure on non-python3 platforms.
2020-08-23 09:42:11 +10:00
6900e57efd Updates to project URLs in docs and embedded in source code 2020-08-22 15:47:11 +10:00
5dad65ac2a Update header files to match whitespace changes in source files 2020-08-22 15:46:31 +10:00
6315f10725 Merge branch 'ginggs-patch-1' 2020-08-22 15:36:02 +10:00
45062b26d6 Merge branch 'patch-1' of https://github.com/ginggs/htop-1 into ginggs-patch-1 2020-08-22 15:35:55 +10:00
ada780c867 Merge branch 'cgzones-ci2' 2020-08-22 15:35:02 +10:00
6aed2be247 Fix build on FreeBSD 2020-08-21 16:49:28 +02:00
9fde0835ed Avoid empty translation unit warning
zfs/ZfsArcStats.c:22: error: ISO C forbids an empty translation unit [-Werror=pedantic]
       22 | }*/
          |
2020-08-21 10:38:44 +02:00
b92f62f912 Remove trailing whitespaces 2020-08-21 10:37:33 +02:00
3856bf574b Introduce xAsprintf as checked version of asprintf 2020-08-21 10:37:29 +02:00
40ac7a88af MakeHeader.py: use python3 shebang
Also drop unused import
2020-08-21 10:37:27 +02:00
d6adc2b681 github/ci: improve ci
- split steps for readability
- fail on compiler warnings
- add whitespace check
- run on all branches
- run `make distcheck`
2020-08-21 10:37:25 +02:00
57254cdd05 configure: add option --enable-werror
Adds the compiler flag -Werror to fail on warnings.
Useful for CI runs.
2020-08-21 10:37:20 +02:00
0b276f80f1 Mention change of maintainership in ChangeLog
Related to https://github.com/hishamhm/htop/issues/992
2020-08-21 16:42:16 +10:00
bba8c3bb2e Update the changelog to reflect content in the 3.0.0 release 2020-08-21 12:10:11 +10:00
45 changed files with 191 additions and 161 deletions

View File

@ -1,22 +1,22 @@
name: CI name: CI
on: on: [ push, pull_request ]
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs: jobs:
build-ubuntu-latest: build-ubuntu-latest:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Install Dependencies
run: sudo apt-get install libncursesw5-dev
- name: Bootstrap
run: ./autogen.sh
- name: Configure
run: ./configure --enable-werror
- name: Build - name: Build
run: | run: make
sudo apt-get install libncursesw5-dev - name: Distcheck
./autogen.sh run: make distcheck
./configure
make
# build-macos-latest: # build-macos-latest:
# runs-on: macos-latest # runs-on: macos-latest
@ -27,3 +27,12 @@ jobs:
# ./autogen.sh # ./autogen.sh
# ./configure # ./configure
# make # make
whitespace_check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: check-whitespaces
run: git diff-tree --check $(git hash-object -t tree /dev/null) HEAD

1
.gitignore vendored
View File

@ -39,4 +39,5 @@ libtool
ltmain.sh ltmain.sh
m4/ m4/
missing missing
scripts/MakeHeader.py
stamp-h1 stamp-h1

View File

@ -615,4 +615,3 @@ void Action_setBindings(Htop_Action* keys) {
keys['c'] = actionTagAllChildren; keys['c'] = actionTagAllChildren;
keys['e'] = actionShowEnvScreen; keys['e'] = actionShowEnvScreen;
} }

View File

@ -54,5 +54,4 @@ extern Htop_Reaction Action_follow(State* st);
extern void Action_setBindings(Htop_Action* keys); extern void Action_setBindings(Htop_Action* keys);
#endif #endif

View File

@ -1,56 +1,34 @@
Contributing Guide Contributing Guide
================== ==================
Hello, and thank you so much for taking your time to contribute in any way to Thank you so much for taking the time to contribute in to htop!
htop! There are many ways to contribute, and I'll try to list them below. The
support from the free software community has been amazing over the years and
it is the number one thing that keeps me going, maintaining and improving
something that started as a tiny pet project back in 2004 and that nowadays is
a piece of software used all over the world, in both reality [and
fiction!](http://hisham.hm/htop/index.php?page=sightings). Cheers!
-- Hisham Muhammad
Bug Reports Bug Reports
----------- -----------
Bug reports should be posted in the [Github issue Bug reports should be posted in the [Github issue
tracker](http://github.com/hishamhm/htop/issues). (I reply to them all, but I tracker](https://github.com/htop-dev/htop/issues).
usually do it in batches! :) ) Bug reports are extremely important since it's Bug reports are extremely important since it's impossible for us to test
impossible for me to test htop in every possible system, distribution and htop in every possible system, distribution and scenario. Your feedback
scenario. Your feedback is what keeps the tool stable and always improving! is what keeps the tool stable and always improving! Thank you!
Thank you!
Pull Requests Pull Requests
------------- -------------
Code contributions are most welcome! Just [fork the Code contributions are most welcome! Just [fork the
repo](http://github.com/hishamhm/htop) and send a [pull repo](https://github.com/htop-dev/htop) and send a [pull
request](https://github.com/hishamhm/htop/pulls). Help is especially request](https://github.com/htop-dev/htop/pulls). Help is especially
appreciated for support of platforms other than Linux. If proposing new appreciated for support of platforms other than Linux. If proposing new
features, please be mindful that htop is a system tool that needs to keep a features, please be mindful that htop is a system tool that needs to keep a
small footprint and perform well on systems under stress -- so unfortunately I small footprint and perform well on systems under stress -- so unfortunately
can't accept every new feature proposed, as I need to keep the tool slim and we can't accept every new feature proposed, as we need to keep the tool slim
maintainable. Great ideas backed by a PR are always carefully considered for and maintainable. Great ideas backed by a PR are always carefully considered
inclusion, though! Also, PRs containing bug fixes and portability tweaks are a for inclusion though! Also, PRs containing bug fixes and portability tweaks
no-brainer, please send those in! are always included, please send those in!
Feature Requests Feature Requests
---------------- ----------------
Back when htop was hosted in SourceForge, there used to be separate Bug Please label Github issues that are feature requests with the [`feature
Tracker and Feature Request pages. These go all lumped together under "Issues" request`](https://github.com/htop-dev/htop/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22feature+request%22+)
in Github, which is a bit confusing. For this reason, I close Feature Requests label.
and file them with the [`feature
request`](https://github.com/hishamhm/htop/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22feature+request%22+)
label, where they remain accessible, but not mixed with actual bug reports.
This doesn't mean I'm dismissing or ignoring feature requests right away! It's
just an organizational issue (with Github, really!).
Donations
---------
If you like htop, feel free to [buy the author a
beer](http://hisham.hm/htop/index.php?page=donate). :-)

View File

@ -353,4 +353,3 @@ Public License instead of this License.
applicable licenses of the version of PLPA used in your combined work, applicable licenses of the version of PLPA used in your combined work,
provided that you include the source code of such version of PLPA when provided that you include the source code of such version of PLPA when
and as the GNU GPL requires distribution of source code. and as the GNU GPL requires distribution of source code.

View File

@ -1,3 +1,64 @@
What's new in version 3.0.0
* New maintainers - after a prolonged period of inactivity
from Hisham, the creator and original maintainer, a team
of community maintainers have volunteered to take over a
fork at https://htop.dev and https://github.com/htop-dev
to keep the project going.
* Support ZFS ARC statistics
(thanks to Ross Williams)
* Support more than 2 smaller CPU meter columns
(thanks to Christoph Budziszewski)
* Support Linux proportional set size metrics
(thanks to @linvinus, @ntninja and @himikof)
* Support Linux pressure stall information metrics
(thanks to Ran Benita)
* New display option to show CPU frequency in CPU meters
(thanks to Arnav Singh)
* Update Linux sysfs battery discovery for recent kernels
(thanks to @smattie)
* Add timestamp reporting to the strace screen
(thanks to Mario Harjac)
* Add simple, optional vim key mapping mode
(thanks to Daniel Flanagan)
* Added an option to disable the mouse
(thanks to MartinJM)
* Add Solaris11 compatibility
(thanks to Jan Senolt)
* Without an argument -u uses $USER value automatically
(thanks to @solanav)
* Support less(1) search navigation shortcuts
(thanks to @syrrim)
* Update the FreeBSD maximum PID to match FreeBSD change
(thanks to @multiplexd)
* Report values larger than 100 terabytes
(thanks to @adrien1018)
* Widen ST_UID (UID) column to allow for UIDs > 9999
(thanks to DLange)
* BUGFIX: fix makefiles for building with clang
(thanks to Jorge Pereira)
* BUGFIX: fix <sys/sysmacros.h> major() usage
(thanks to @wataash and Kang-Che Sung)
* BUGFIX: fix the STARTTIME column on FreeBSD
(thanks to Rob Crowston)
* BUGFIX: truncate overwide jail names on FreeBSD
(thanks to Rob Crowston)
* BUGFIX: fix reported memory values on FreeBSD
(thanks to Tobias Kortkamp)
* BUGFIX: fix reported CPU meter values on OpenBSD
(thanks to @motet-a)
* BUGFIX: correctly identify other types of zombie process
(thanks to @joder)
* BUGFIX: improve follow-process handling in some situations
(thanks to @wangqr)
* BUGFIX: fix custom meters reverting to unexpected setting
(thanks to @wangqr)
* BUGFIX: close pipe after running lsof(1)
(thanks to Jesin)
* BUGFIX: meters honour setting of counting CPUs from 0/1
(thanks to @rnsanchez)
What's new in version 2.2.0 What's new in version 2.2.0
* Solaris/Illumos/OpenIndiana support * Solaris/Illumos/OpenIndiana support
@ -158,7 +219,7 @@ What's new in version 1.0.2
What's new in version 1.0.1 What's new in version 1.0.1
* Move .htoprc to XDG-compliant path ~/.config/htop/htoprc, * Move .htoprc to XDG-compliant path ~/.config/htop/htoprc,
respecting $XDG_CONFIG_HOME respecting $XDG_CONFIG_HOME
(thanks to Hadzhimurad Ustarkhan for the suggestion.) (thanks to Hadzhimurad Ustarkhan for the suggestion.)
* Safer behavior on the kill screen, to make it harder to kill the wrong process. * Safer behavior on the kill screen, to make it harder to kill the wrong process.
* Fix for building in FreeBSD 8.2 * Fix for building in FreeBSD 8.2
@ -546,7 +607,7 @@ What's new in version 0.3.1
What's new in version 0.3 What's new in version 0.3
* BUGFIX: no dirt left on screen on horizontal scrolling * BUGFIX: no dirt left on screen on horizontal scrolling
* Signal selection on "kill" command * Signal selection on "kill" command
* Color-coding for users, nice and process status * Color-coding for users, nice and process status
* "Follow" function * "Follow" function

View File

@ -164,4 +164,3 @@ void ColumnsPanel_update(Panel* super) {
} }
this->settings->fields[size] = 0; this->settings->fields[size] = 0;
} }

View File

@ -28,5 +28,4 @@ extern int ColumnsPanel_fieldNameToIndex(const char* name);
extern void ColumnsPanel_update(Panel* super); extern void ColumnsPanel_update(Panel* super);
#endif #endif

View File

@ -85,4 +85,3 @@ long ListItem_compare(const void* cast1, const void* cast2) {
ListItem* obj2 = (ListItem*) cast2; ListItem* obj2 = (ListItem*) cast2;
return strcmp(obj1->value, obj2->value); return strcmp(obj1->value, obj2->value);
} }

View File

@ -29,5 +29,4 @@ extern const char* ListItem_getRef(ListItem* this);
extern long ListItem_compare(const void* cast1, const void* cast2); extern long ListItem_compare(const void* cast1, const void* cast2);
#endif #endif

View File

@ -12,7 +12,7 @@ applications_DATA = htop.desktop
pixmapdir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps
pixmap_DATA = htop.png pixmap_DATA = htop.png
AM_CFLAGS = -pedantic -Wall $(wextra_flag) -std=c99 -D_XOPEN_SOURCE_EXTENDED -DSYSCONFDIR=\"$(sysconfdir)\" -I"$(top_srcdir)/$(my_htop_platform)" AM_CFLAGS += -pedantic -Wall $(wextra_flag) -std=c99 -D_XOPEN_SOURCE_EXTENDED -DSYSCONFDIR=\"$(sysconfdir)\" -I"$(top_srcdir)/$(my_htop_platform)"
AM_LDFLAGS = AM_LDFLAGS =
AM_CPPFLAGS = -DNDEBUG AM_CPPFLAGS = -DNDEBUG

1
NEWS
View File

@ -2,4 +2,3 @@
See the commit history for news of the past. See the commit history for news of the past.
See the bug tracker for news of the future. See the bug tracker for news of the future.
Run the program for news of the present. Run the program for news of the present.

View File

@ -4,47 +4,47 @@ Main screen:
For all views, all modes: For all views, all modes:
Mouse click header - nothing happens. Mouse click header - nothing happens.
Mouse click on ProcessList title bar - exit Tree view, update FunctionBar, title bar updates, sort by clicked field. Mouse click on ProcessList title bar - exit Tree view, update FunctionBar, title bar updates, sort by clicked field.
*** FAILING: wrong FB update depending on mode; does not change sort in wip branch *** FAILING: wrong FB update depending on mode; does not change sort in wip branch
click on same entry - invert sort. click on same entry - invert sort.
click on another entry - sort another field. click on another entry - sort another field.
Mouse click on a process - select that process. Mouse click on a process - select that process.
for each entry in FunctionBar: for each entry in FunctionBar:
Mouse click entry - perform action of associated key. Mouse click entry - perform action of associated key.
In Normal mode, Sorted view: In Normal mode, Sorted view:
<+> or <-> - do nothing. <+> or <-> - do nothing.
<F6> - enter SortBy screen. <F6> - enter SortBy screen.
In Normal mode, Tree view: In Normal mode, Tree view:
select process - update F6 in FunctionBar if subtree is collapsed or expanded. select process - update F6 in FunctionBar if subtree is collapsed or expanded.
<F6>, <+> or <-> - expand/collapse subtree. <F6>, <+> or <-> - expand/collapse subtree.
In Normal mode, either Sorted or Tree view: In Normal mode, either Sorted or Tree view:
<F3>, </> - activate Search mode. <F3>, </> - activate Search mode.
<F4>, <\> - activate Filter mode. <F4>, <\> - activate Filter mode.
<F7>, <]> - as root only, decrease process NICE value. <F7>, <]> - as root only, decrease process NICE value.
<F8>, <[> - increase process NICE value. <F8>, <[> - increase process NICE value.
<a> - enter Affinity screen. <a> - enter Affinity screen.
<b> - do nothing. <b> - do nothing.
<c> - select process and all its children. <c> - select process and all its children.
<d>, <e>, <f>, <g> - do nothing. <d>, <e>, <f>, <g> - do nothing.
<F1>, <h>, <?> - enter Help screen. <F1>, <h>, <?> - enter Help screen.
<i> - on Linux, enter IOPriority screen. <i> - on Linux, enter IOPriority screen.
@ -64,67 +64,67 @@ Main screen:
<s> - enter STrace screen. <s> - enter STrace screen.
<F5>, <t> - toggle between Tree and Sorted view, update F5 in FunctionBar, follow process <F5>, <t> - toggle between Tree and Sorted view, update F5 in FunctionBar, follow process
<u> - enter User screen. <u> - enter User screen.
<v>, <w>, <x>, <y>, <z> - do nothing. <v>, <w>, <x>, <y>, <z> - do nothing.
<A>, <B> - do nothing. <A>, <B> - do nothing.
<F2>, <C>, <S> - enter Setup screen. <F2>, <C>, <S> - enter Setup screen.
<D>, <E> - do nothing. <D>, <E> - do nothing.
<F> - follow process. <F> - follow process.
<G> - do nothing. <G> - do nothing.
<H> - toggle show/hide userland threads. <H> - toggle show/hide userland threads.
<I> - invert sort order. <I> - invert sort order.
<J> - do nothing. <J> - do nothing.
<K> - toggle show/hide kernel threads. <K> - toggle show/hide kernel threads.
<L> - do nothing. <L> - do nothing.
<M> - enter Sorted view, update function bar, sort by MEM%. <M> - enter Sorted view, update function bar, sort by MEM%.
<N>, <O> - do nothing. <N>, <O> - do nothing.
<P> - enter Sorted view, update function bar, sort by CPU%. <P> - enter Sorted view, update function bar, sort by CPU%.
<Q>, <R> - do nothing. <Q>, <R> - do nothing.
<T> - enter Sorted view, update function bar, sort by TIME. <T> - enter Sorted view, update function bar, sort by TIME.
<U> - untag all processes. <U> - untag all processes.
<V>, <W>, <X>, <Y>, <Z> - do nothing. <V>, <W>, <X>, <Y>, <Z> - do nothing.
<<>, <>>, <,>, <.> - enter SortBy screen. <<>, <>>, <,>, <.> - enter SortBy screen.
space - tag current process, move down cursor. space - tag current process, move down cursor.
numbers - incremental PID search. numbers - incremental PID search.
In Search mode: In Search mode:
TODO TODO
In Filter mode: In Filter mode:
TODO TODO
Setup screen: Setup screen:
TODO TODO
SortBy screen: SortBy screen:
TODO TODO
User screen: User screen:
TODO TODO
@ -136,7 +136,7 @@ Kill screen:
Affinity screen: Affinity screen:
TODO TODO
Help screen: Help screen:
any key - back to Main screen. any key - back to Main screen.
@ -152,4 +152,3 @@ STrace screen:
LSOF screen: LSOF screen:
TODO TODO

View File

@ -14,7 +14,7 @@
#include <stdlib.h> #include <stdlib.h>
}*/ }*/
static inline void fail() { void fail() {
curs_set(1); curs_set(1);
endwin(); endwin();
err(1, NULL); err(1, NULL);
@ -44,6 +44,10 @@ void* xRealloc(void* ptr, size_t size) {
return data; return data;
} }
#undef xAsprintf
#define xAsprintf(strp, fmt, ...) do { int _r=asprintf(strp, fmt, __VA_ARGS__); if (_r < 0) { fail(); } } while(0)
#define xSnprintf(fmt, len, ...) do { int _l=len; int _n=snprintf(fmt, _l, __VA_ARGS__); if (!(_n > -1 && _n < _l)) { curs_set(1); endwin(); err(1, NULL); } } while(0) #define xSnprintf(fmt, len, ...) do { int _l=len; int _n=snprintf(fmt, _l, __VA_ARGS__); if (!(_n > -1 && _n < _l)) { curs_set(1); endwin(); err(1, NULL); } } while(0)
#undef xStrdup #undef xStrdup

View File

@ -11,12 +11,18 @@
#include <assert.h> #include <assert.h>
#include <stdlib.h> #include <stdlib.h>
extern void fail(void);
extern void* xMalloc(size_t size); extern void* xMalloc(size_t size);
extern void* xCalloc(size_t nmemb, size_t size); extern void* xCalloc(size_t nmemb, size_t size);
extern void* xRealloc(void* ptr, size_t size); extern void* xRealloc(void* ptr, size_t size);
#undef xAsprintf
#define xAsprintf(strp, fmt, ...) do { int _r=asprintf(strp, fmt, __VA_ARGS__); if (_r < 0) { fail(); } } while(0)
#define xSnprintf(fmt, len, ...) do { int _l=len; int _n=snprintf(fmt, _l, __VA_ARGS__); if (!(_n > -1 && _n < _l)) { curs_set(1); endwin(); err(1, NULL); } } while(0) #define xSnprintf(fmt, len, ...) do { int _l=len; int _n=snprintf(fmt, _l, __VA_ARGS__); if (!(_n > -1 && _n < _l)) { curs_set(1); endwin(); err(1, NULL); } } while(0)
#undef xStrdup #undef xStrdup

View File

@ -223,7 +223,7 @@ else
HTOP_CHECK_LIB([ncurses], [refresh], [HAVE_LIBNCURSES], HTOP_CHECK_LIB([ncurses], [refresh], [HAVE_LIBNCURSES],
missing_libraries="$missing_libraries libncurses" missing_libraries="$missing_libraries libncurses"
)))) ))))
AC_CHECK_HEADERS([curses.h],[:], AC_CHECK_HEADERS([curses.h],[:],
[AC_CHECK_HEADERS([ncurses/curses.h],[:], [AC_CHECK_HEADERS([ncurses/curses.h],[:],
[AC_CHECK_HEADERS([ncurses/ncurses.h],[:], [AC_CHECK_HEADERS([ncurses/ncurses.h],[:],
@ -295,6 +295,12 @@ then
]) ])
fi fi
AC_ARG_ENABLE([werror], [AS_HELP_STRING([--enable-werror], [Treat warnings as errors (default: warnings are not errors)])], [enable_werror="$enableval"], [enable_werror=no])
AS_IF([test "x$enable_werror" = "xyes"], [AM_CFLAGS="$AM_CFLAGS -Werror"])
AC_SUBST([AM_CFLAGS])
AC_CHECK_PROGS(PYTHON, [python python3 python2])
AC_SUBST(PYTHON)
# Bail out on errors. # Bail out on errors.
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
@ -317,7 +323,7 @@ AM_CONDITIONAL([HTOP_DARWIN], [test "$my_htop_platform" = darwin])
AM_CONDITIONAL([HTOP_SOLARIS], [test "$my_htop_platform" = solaris]) AM_CONDITIONAL([HTOP_SOLARIS], [test "$my_htop_platform" = solaris])
AM_CONDITIONAL([HTOP_UNSUPPORTED], [test "$my_htop_platform" = unsupported]) AM_CONDITIONAL([HTOP_UNSUPPORTED], [test "$my_htop_platform" = unsupported])
AC_SUBST(my_htop_platform) AC_SUBST(my_htop_platform)
AC_CONFIG_FILES([Makefile htop.1]) AC_CONFIG_FILES([Makefile htop.1 scripts/MakeHeader.py], [chmod +x scripts/MakeHeader.py])
AC_OUTPUT AC_OUTPUT
if test "$my_htop_platform" = "unsupported" if test "$my_htop_platform" = "unsupported"

View File

@ -72,4 +72,3 @@ void Battery_getData(double* level, ACPresence* isOnAC) {
CFRelease(power_sources); CFRelease(power_sources);
} }
} }

View File

@ -15,7 +15,7 @@ void CRT_handleSIGSEGV(int sgn) {
(void) sgn; (void) sgn;
CRT_done(); CRT_done();
#ifdef __APPLE__ #ifdef __APPLE__
fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at http://hisham.hm/htop\n"); fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at https://htop.dev\n");
#ifdef HAVE_EXECINFO_H #ifdef HAVE_EXECINFO_H
size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *)); size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *));
fprintf(stderr, "\n Please include in your report the following backtrace: \n"); fprintf(stderr, "\n Please include in your report the following backtrace: \n");
@ -32,4 +32,3 @@ void CRT_handleSIGSEGV(int sgn) {
#endif #endif
abort(); abort();
} }

View File

@ -17,7 +17,7 @@ in the source distribution for its full text.
void CRT_handleSIGSEGV(int sgn) { void CRT_handleSIGSEGV(int sgn) {
(void) sgn; (void) sgn;
CRT_done(); CRT_done();
fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at http://hisham.hm/htop\n"); fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at https://htop.dev\n");
#ifdef HAVE_EXECINFO_H #ifdef HAVE_EXECINFO_H
size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *)); size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *));
fprintf(stderr, "\n Please include in your report the following backtrace: \n"); fprintf(stderr, "\n Please include in your report the following backtrace: \n");
@ -32,4 +32,3 @@ void CRT_handleSIGSEGV(int sgn) {
#endif #endif
abort(); abort();
} }

View File

@ -18,4 +18,3 @@ void CRT_handleSIGSEGV(int sgn) {
fprintf(stderr, "\nPlease contact your platform package maintainer!\n\n"); fprintf(stderr, "\nPlease contact your platform package maintainer!\n\n");
abort(); abort();
} }

View File

@ -325,17 +325,6 @@ static inline void FreeBSDProcessList_scanMemoryInfo(ProcessList* pl) {
cachedMem *= pageSizeKb; cachedMem *= pageSizeKb;
pl->cachedMem = cachedMem; pl->cachedMem = cachedMem;
if (fpl->zfsArcEnabled) {
len = sizeof(memZfsArc);
sysctl(MIB_kstat_zfs_misc_arcstats_size, 5, &(memZfsArc), &len , NULL, 0);
memZfsArc /= 1024;
fpl->memZfsArc = memZfsArc;
fpl->memWire -= fpl->memZfsArc;
pl->cachedMem += fpl->memZfsArc;
// maybe when we learn how to make custom memory meter
// we could do custom arc breakdown?
}
if (fpl->zfs.enabled) { if (fpl->zfs.enabled) {
fpl->memWire -= fpl->zfs.size; fpl->memWire -= fpl->zfs.size;
pl->cachedMem += fpl->zfs.size; pl->cachedMem += fpl->zfs.size;

View File

@ -2,11 +2,11 @@
.SH "NAME" .SH "NAME"
htop \- interactive process viewer htop \- interactive process viewer
.SH "SYNOPSIS" .SH "SYNOPSIS"
.LP .LP
.B htop .B htop
.RB [ \-dChpustv ] .RB [ \-dChpustv ]
.SH "DESCRIPTION" .SH "DESCRIPTION"
.LP .LP
.B htop .B htop
is a cross-platform ncurses-based process viewer. is a cross-platform ncurses-based process viewer.
.LP .LP
@ -20,11 +20,11 @@ multiple processes and acting on them all at once.
.LP .LP
Tasks related to processes (killing, renicing) can be done without Tasks related to processes (killing, renicing) can be done without
entering their PIDs. entering their PIDs.
.br .br
.SH "COMMAND-LINE OPTIONS" .SH "COMMAND-LINE OPTIONS"
.LP .LP
Mandatory arguments to long options are mandatory for short options too. Mandatory arguments to long options are mandatory for short options too.
.LP .LP
.TP .TP
\fB\-d \-\-delay=DELAY\fR \fB\-d \-\-delay=DELAY\fR
Delay between updates, in tenths of seconds. If the delay value is Delay between updates, in tenths of seconds. If the delay value is
@ -54,10 +54,10 @@ Output version information and exit
\fB\-t \-\-tree \fB\-t \-\-tree
Show processes in tree view Show processes in tree view
.SH "INTERACTIVE COMMANDS" .SH "INTERACTIVE COMMANDS"
.LP .LP
The following commands are supported while in The following commands are supported while in
.BR htop : .BR htop :
.LP .LP
.TP 5 .TP 5
.B Up, Alt-k .B Up, Alt-k
Select (highlight) the previous process in the process list. Scroll the list Select (highlight) the previous process in the process list. Scroll the list
@ -159,7 +159,7 @@ Quit
Invert the sort order: if sort order is increasing, switch to decreasing, and Invert the sort order: if sort order is increasing, switch to decreasing, and
vice-versa. vice-versa.
.TP .TP
.B +, \- .B +, \-
When in tree view mode, expand or collapse subtree. When a subtree is collapsed When in tree view mode, expand or collapse subtree. When a subtree is collapsed
a "+" sign shows to the left of the process name. a "+" sign shows to the left of the process name.
.TP .TP
@ -203,7 +203,7 @@ Refresh: redraw screen and recalculate values.
PID search: type in process ID and the selection highlight will be moved to it. PID search: type in process ID and the selection highlight will be moved to it.
.PD .PD
.SH "COLUMNS" .SH "COLUMNS"
.LP .LP
The following columns can display data about each process. A value of '\-' in The following columns can display data about each process. A value of '\-' in
all the rows indicates that a column is unsupported on your system, or all the rows indicates that a column is unsupported on your system, or
currently unimplemented in currently unimplemented in
@ -213,11 +213,11 @@ The names below are the ones used in the
shown in shown in
.BR htop 's .BR htop 's
main screen, it is shown below in parenthesis. main screen, it is shown below in parenthesis.
.LP .LP
.TP 5 .TP 5
.B Command .B Command
The full command line of the process (i.e. program name and arguments). The full command line of the process (i.e. program name and arguments).
.TP .TP
.B PID .B PID
The process ID. The process ID.
.TP .TP
@ -238,7 +238,7 @@ The process's group ID.
.TP .TP
.B SESSION (SID) .B SESSION (SID)
The process's session ID. The process's session ID.
.TP .TP
.B TTY_NR (TTY) .B TTY_NR (TTY)
The controlling terminal of the process. The controlling terminal of the process.
.TP .TP
@ -401,7 +401,7 @@ The percentage of time spent swapping in pages. Requires CAP_NET_ADMIN.
.B All other flags .B All other flags
Currently unsupported (always displays '-'). Currently unsupported (always displays '-').
.SH "CONFIG FILE" .SH "CONFIG FILE"
.LP .LP
By default By default
.B htop .B htop
reads its configuration from the XDG-compliant path reads its configuration from the XDG-compliant path
@ -437,7 +437,7 @@ space and make memory size representations consistent throughout
and and
.BR limits.conf (5). .BR limits.conf (5).
.SH "AUTHORS" .SH "AUTHORS"
.LP .LP
.B htop .B htop
was originally developed by Hisham Muhammad. was originally developed by Hisham Muhammad.
Nowadays it is maintained by the community at <htop@groups.io>. Nowadays it is maintained by the community at <htop@groups.io>.

View File

@ -38,4 +38,3 @@ typedef int IOPriority;
#define IOPriority_Idle IOPriority_tuple(IOPRIO_CLASS_IDLE, 7) #define IOPriority_Idle IOPriority_tuple(IOPRIO_CLASS_IDLE, 7)
}*/ }*/

View File

@ -39,5 +39,4 @@ typedef int IOPriority;
#define IOPriority_Idle IOPriority_tuple(IOPRIO_CLASS_IDLE, 7) #define IOPriority_Idle IOPriority_tuple(IOPRIO_CLASS_IDLE, 7)
#endif #endif

View File

@ -41,4 +41,3 @@ Panel* IOPriorityPanel_new(IOPriority currPrio) {
IOPriority IOPriorityPanel_getIOPriority(Panel* this) { IOPriority IOPriorityPanel_getIOPriority(Panel* this) {
return (IOPriority) ( ((ListItem*) Panel_getSelected(this))->key ); return (IOPriority) ( ((ListItem*) Panel_getSelected(this))->key );
} }

View File

@ -17,5 +17,4 @@ extern Panel* IOPriorityPanel_new(IOPriority currPrio);
extern IOPriority IOPriorityPanel_getIOPriority(Panel* this); extern IOPriority IOPriorityPanel_getIOPriority(Panel* this);
#endif #endif

View File

@ -17,7 +17,7 @@ void CRT_handleSIGSEGV(int sgn) {
(void) sgn; (void) sgn;
CRT_done(); CRT_done();
#ifdef __linux #ifdef __linux
fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at http://hisham.hm/htop\n"); fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at https://htop.dev\n");
#ifdef HAVE_EXECINFO_H #ifdef HAVE_EXECINFO_H
size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *)); size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *));
fprintf(stderr, "\n Please include in your report the following backtrace: \n"); fprintf(stderr, "\n Please include in your report the following backtrace: \n");

View File

@ -514,4 +514,3 @@ long LinuxProcess_compare(const void* v1, const void* v2) {
bool Process_isThread(Process* this) { bool Process_isThread(Process* this) {
return (Process_isUserlandThread(this) || Process_isKernelThread(this)); return (Process_isUserlandThread(this) || Process_isKernelThread(this));
} }

View File

@ -189,5 +189,4 @@ extern long LinuxProcess_compare(const void* v1, const void* v2);
extern bool Process_isThread(Process* this); extern bool Process_isThread(Process* this);
#endif #endif

View File

@ -822,11 +822,11 @@ static char* LinuxProcessList_updateTtyDevice(TtyDriver* ttyDrivers, unsigned in
struct stat sstat; struct stat sstat;
char* fullPath; char* fullPath;
for(;;) { for(;;) {
asprintf(&fullPath, "%s/%d", ttyDrivers[i].path, idx); xAsprintf(&fullPath, "%s/%d", ttyDrivers[i].path, idx);
int err = stat(fullPath, &sstat); int err = stat(fullPath, &sstat);
if (err == 0 && major(sstat.st_rdev) == maj && minor(sstat.st_rdev) == min) return fullPath; if (err == 0 && major(sstat.st_rdev) == maj && minor(sstat.st_rdev) == min) return fullPath;
free(fullPath); free(fullPath);
asprintf(&fullPath, "%s%d", ttyDrivers[i].path, idx); xAsprintf(&fullPath, "%s%d", ttyDrivers[i].path, idx);
err = stat(fullPath, &sstat); err = stat(fullPath, &sstat);
if (err == 0 && major(sstat.st_rdev) == maj && minor(sstat.st_rdev) == min) return fullPath; if (err == 0 && major(sstat.st_rdev) == maj && minor(sstat.st_rdev) == min) return fullPath;
free(fullPath); free(fullPath);
@ -837,7 +837,7 @@ static char* LinuxProcessList_updateTtyDevice(TtyDriver* ttyDrivers, unsigned in
if (err == 0 && tty_nr == sstat.st_rdev) return strdup(ttyDrivers[i].path); if (err == 0 && tty_nr == sstat.st_rdev) return strdup(ttyDrivers[i].path);
} }
char* out; char* out;
asprintf(&out, "/dev/%u:%u", maj, min); xAsprintf(&out, "/dev/%u:%u", maj, min);
return out; return out;
} }

View File

@ -19,4 +19,3 @@ void CRT_handleSIGSEGV(int sgn) {
fprintf(stderr, "\nPlease contact your platform package maintainer!\n\n"); fprintf(stderr, "\nPlease contact your platform package maintainer!\n\n");
abort(); abort();
} }

View File

@ -400,4 +400,3 @@ void ProcessList_goThroughEntries(ProcessList* this) {
OpenBSDProcessList_scanProcs(opl); OpenBSDProcessList_scanProcs(opl);
OpenBSDProcessList_scanCPUTime(opl); OpenBSDProcessList_scanCPUTime(opl);
} }

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env @PYTHON@
import os, sys, string, io import os, sys, string, io
try: try:
from StringIO import StringIO from StringIO import StringIO

View File

@ -5,4 +5,3 @@ void Battery_getData(double* level, ACPresence* isOnAC) {
*level = -1; *level = -1;
*isOnAC = AC_ERROR; *isOnAC = AC_ERROR;
} }

View File

@ -17,7 +17,7 @@ in the source distribution for its full text.
void CRT_handleSIGSEGV(int sgn) { void CRT_handleSIGSEGV(int sgn) {
(void) sgn; (void) sgn;
CRT_done(); CRT_done();
fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at http://hisham.hm/htop\n"); fprintf(stderr, "\n\nhtop " VERSION " aborting. Please report bug at https://htop.dev\n");
#ifdef HAVE_EXECINFO_H #ifdef HAVE_EXECINFO_H
size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *)); size_t size = backtrace(backtraceArray, sizeof(backtraceArray) / sizeof(void *));
fprintf(stderr, "\n Please include in your report the following backtrace: \n"); fprintf(stderr, "\n Please include in your report the following backtrace: \n");

View File

@ -419,4 +419,3 @@ void ProcessList_goThroughEntries(ProcessList* this) {
this->kernelThreads = 1; this->kernelThreads = 1;
proc_walk(&SolarisProcessList_walkproc, this, PR_WALK_LWP); proc_walk(&SolarisProcessList_walkproc, this, PR_WALK_LWP);
} }

View File

@ -1,7 +1,7 @@
#!/usr/bin/env lua #!/usr/bin/env lua
local VISUALDELAY = os.getenv("VISUALDELAY") local VISUALDELAY = os.getenv("VISUALDELAY")
local visual = VISUALDELAY or false local visual = VISUALDELAY or false
local visual_delay = VISUALDELAY and (tonumber(VISUALDELAY)) or 0.1 local visual_delay = VISUALDELAY and (tonumber(VISUALDELAY)) or 0.1
local short_delay = 0.3 local short_delay = 0.3
@ -70,7 +70,7 @@ local function show(key)
term_win:mvaddstr(0, 0, tostring(key)) term_win:mvaddstr(0, 0, tostring(key))
end end
term_win:refresh() term_win:refresh()
delay(visual_delay) delay(visual_delay)
end end
end end
@ -191,7 +191,7 @@ local function set_display_option(n)
end end
describe("htop test suite", function() describe("htop test suite", function()
running_it("performs incremental filter", function() running_it("performs incremental filter", function()
send("\\") send("\\")
send("x\127bux\127sted") -- test backspace send("x\127bux\127sted") -- test backspace
@ -397,13 +397,13 @@ describe("htop test suite", function()
assert.not_equal(pair[1], pair[2]) assert.not_equal(pair[1], pair[2])
end end
end) end)
running_it("visits each setup screen", function() running_it("visits each setup screen", function()
send("S") send("S")
send(curses.KEY_DOWN, 3) send(curses.KEY_DOWN, 3)
send(curses.KEY_F10) send(curses.KEY_F10)
end) end)
running_it("adds and removes PPID column", function() running_it("adds and removes PPID column", function()
send("S") send("S")
send(curses.KEY_DOWN, 3) send(curses.KEY_DOWN, 3)
@ -423,7 +423,7 @@ describe("htop test suite", function()
assert.equal(check(ppid)) assert.equal(check(ppid))
assert.not_equal(check(not_ppid)) assert.not_equal(check(not_ppid))
end) end)
running_it("changes CPU affinity for a process", function() running_it("changes CPU affinity for a process", function()
send("a") send("a")
send(" \n") send(" \n")
@ -468,7 +468,7 @@ describe("htop test suite", function()
assert.equal(check(zerocpu)) assert.equal(check(zerocpu))
assert.not_equal(check(nonzerocpu)) assert.not_equal(check(nonzerocpu))
end) end)
running_it("changes IO priority for a process", function() running_it("changes IO priority for a process", function()
send("/") send("/")
send("htop") send("htop")
@ -502,7 +502,7 @@ describe("htop test suite", function()
send("\n") send("\n")
send(curses.KEY_F10) send(curses.KEY_F10)
end) end)
local meters = { local meters = {
{ name = "clock", down = 0, string = "Time" }, { name = "clock", down = 0, string = "Time" },
{ name = "load", down = 2, string = "Load" }, { name = "load", down = 2, string = "Load" },
@ -558,7 +558,7 @@ describe("htop test suite", function()
send("\n") send("\n")
send(curses.KEY_F10) send(curses.KEY_F10)
end) end)
local display_options = { local display_options = {
{ name = "tree view", down = 0 }, { name = "tree view", down = 0 },
{ name = "shadow other user's process", down = 1 }, { name = "shadow other user's process", down = 1 },
@ -574,7 +574,7 @@ describe("htop test suite", function()
{ name = "update process names", down = 11 }, { name = "update process names", down = 11 },
{ name = "guest time in CPU%", down = 12 }, { name = "guest time in CPU%", down = 12 },
} }
for _, item in ipairs(display_options) do for _, item in ipairs(display_options) do
running_it("checks display option to "..item.name, function() running_it("checks display option to "..item.name, function()
for _ = 1, 2 do for _ = 1, 2 do
@ -641,7 +641,7 @@ describe("htop test suite", function()
assert.equal(attrs.white_on_black, untaggedattr) assert.equal(attrs.white_on_black, untaggedattr)
end end
end) end)
for i = 1, 62 do for i = 1, 62 do
running_it("show column "..i, function() running_it("show column "..i, function()
send("S") send("S")
@ -670,7 +670,7 @@ describe("htop test suite", function()
end end
end) end)
end end
it("finally quits", function() it("finally quits", function()
assert(not terminated()) assert(not terminated())
send("q") send("q")
@ -685,4 +685,3 @@ describe("htop test suite", function()
os.execute("make lcov && xdg-open lcov/index.html") os.execute("make lcov && xdg-open lcov/index.html")
end) end)
end) end)

View File

@ -5,4 +5,3 @@ void Battery_getData(double* level, ACPresence* isOnAC) {
*level = -1; *level = -1;
*isOnAC = AC_ERROR; *isOnAC = AC_ERROR;
} }

View File

@ -18,4 +18,3 @@ void CRT_handleSIGSEGV(int sgn) {
fprintf(stderr, "\nPlease contact your platform package maintainer!\n\n"); fprintf(stderr, "\nPlease contact your platform package maintainer!\n\n");
abort(); abort();
} }

View File

@ -30,4 +30,3 @@ void UnsupportedProcess_delete(Object* cast) {
// free platform-specific fields here // free platform-specific fields here
free(this); free(this);
} }

View File

@ -93,7 +93,7 @@ MeterClass ZfsArcMeter_class = {
.delete = Meter_delete, .delete = Meter_delete,
.display = ZfsArcMeter_display, .display = ZfsArcMeter_display,
}, },
.updateValues = ZfsArcMeter_updateValues, .updateValues = ZfsArcMeter_updateValues,
.defaultMode = TEXT_METERMODE, .defaultMode = TEXT_METERMODE,
.maxItems = 6, .maxItems = 6,
.total = 100.0, .total = 100.0,

View File

@ -15,7 +15,7 @@ in the source distribution for its full text.
extern int ZfsArcMeter_attributes[]; extern int ZfsArcMeter_attributes[];
void ZfsArcMeter_readStats(Meter* this, ZfsArcStats* stats); extern void ZfsArcMeter_readStats(Meter* this, ZfsArcStats* stats);
extern MeterClass ZfsArcMeter_class; extern MeterClass ZfsArcMeter_class;

View File

@ -20,3 +20,5 @@ typedef struct ZfsArcStats_ {
unsigned long long int uncompressed; unsigned long long int uncompressed;
} ZfsArcStats; } ZfsArcStats;
}*/ }*/
static int make_iso_compilers_happy __attribute__((unused));

View File

@ -23,4 +23,5 @@ typedef struct ZfsArcStats_ {
unsigned long long int uncompressed; unsigned long long int uncompressed;
} ZfsArcStats; } ZfsArcStats;
#endif #endif