Jeff Smith [Thu, 16 Mar 2017 16:18:07 +0000 (11:18 -0500)]
killall: fix reporting when >32 names specified
Recording which named processes were killed is stored in an unsigned
long bitmask. Some of the bit-wise math is done with an int. If
sizeof(long) > sizeof(int), some not-found processes may not be reported
as such, and/or the return code may be wrong.
This is fixed by making sure bit-wise math is being done with a long.
Radu Rendec [Thu, 30 Jun 2016 16:15:21 +0000 (18:15 +0200)]
Avoid possible crash and memory leak in killall
In the case of a command line match, load_proc_cmdline would return a
pointer that was not obtained from malloc, which then would be freed in
kill_all. This behavior could result in a SIGSEGV.
In the case of an empty command line, load_proc_cmdline would return -1,
causing its internal buffer to be leaked in kill_all.
Signed-off-by: Radu Rendec <radu.rendec@mindbit.ro> Signed-off-by: Craig Small <csmall@enc.com.au>
Craig Small [Fri, 17 Jun 2016 22:00:10 +0000 (22:00 +0000)]
Merge branch 'hide_threads' into 'master'
Add option --hide-threads (-T) to hide threads from display
On desktop systems, there will usually be a gazillion of threads
(hello chrome!) that clutter the display. Add an option to optionally
hide these from showing up at all.
PS: Fwiw, I'd personally prefer to have threads hidden by default. If that's desired, I can update the patch to reverse the logic.
Christoph Berg [Sat, 21 May 2016 08:41:24 +0000 (10:41 +0200)]
Add option --hide-threads (-T) to hide threads from display
On desktop systems, there will usually be a gazillion of threads
(hello chrome!) that clutter the display. Add an option to optionally
hide these from showing up at all.
Craig Small [Sun, 1 May 2016 05:36:22 +0000 (05:36 +0000)]
Merge branch 'fix/pslog_unterminated_string' into 'master'
pslog: fix unterminated string and memory leaks
Adding null terminator to buf string.
Cleaned a memory leak calling closedir on /proc/$PID/fd, that was left open.
`==29483==
==29483== HEAP SUMMARY:
==29483== in use at exit: 0 bytes in 0 blocks
==29483== total heap usage: 256 allocs, 256 frees, 70,990 bytes allocated
==29483==
==29483== All heap blocks were freed -- no leaks are possible
==29483==
==29483== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
==29483== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)`
Craig Small [Sat, 30 Apr 2016 23:14:40 +0000 (23:14 +0000)]
Merge branch 'master' into 'master'
Adding pslog(1): Report current log(s) path of a process
Simple binary to find the log(s) path for a given PID. Please review my code and highlight any mistake or anything missing. Thanks very much for your time.
Craig Small [Thu, 28 Apr 2016 12:16:51 +0000 (22:16 +1000)]
killall: fix malloc branch logic for pgid
A fix to remove some spurious code removed a branch and an else
but did not invert the if check like it should. It meant if
process groups were used the spaces was not allocated.
Craig Small [Mon, 25 Apr 2016 06:57:35 +0000 (16:57 +1000)]
fuser,prtstat: use standard sscanf flag for alloc
Previously GNU libc supported the a option in scanf, e.g.
%as to allocate the buffer for the scanned string. The manual
recommends to use m instead as it follows the standard.
Craig Small [Thu, 25 Jun 2015 11:31:17 +0000 (21:31 +1000)]
fuser: rework string comparison
This one is a patch that reworks the string comparision for file name
space in fuser. It makes the usage of this configurable with
--enable-mountinfo-list at build time as well as at runtime with
--inode. Also it uses shared memory maps to reduce the load on
write/read the stat buffers.
Craig Small [Sat, 14 Mar 2015 22:08:12 +0000 (09:08 +1100)]
fuser: -k return status based on any found
In [bugs:#66] the ever-helpful "Anonymous" reported that
fuser with -k would only return correctly if the process
was found last and not if it was found anywhere.
While I have solved this problem a different way, the report
was enough to narrow down what was going wrong. Now fuser -k
returns 1 if it finds any process to kill, not just if the last
one was; just like fuser with no -k works.
Werner Fink [Sat, 14 Mar 2015 21:39:12 +0000 (08:39 +1100)]
Avoid possible crash and memory leak in killall
By reading the current HEAD I stumbled on a memory leak in killall.c
as well as a not assigned pointer got_long in load_proc_cmdline()
which may lead to SIGSEGV.
References: [patches:#67] https://sourceforge.net/p/psmisc/bugs/67 Signed-off-by: Werner Fink <werner@suse.de>
Craig Small [Tue, 23 Dec 2014 21:35:34 +0000 (08:35 +1100)]
killall younger and older flags
The -y and -o flags were not being used if you used the
regex (-r) flag. I initially moved those flags to the
right part of the loop.
However looking at that giant loop of code it was very difficult
to debug so I have also taken the opportunity to re-work it
with some functions, so its clearer what is going on.
Craig Small [Mon, 22 Dec 2014 21:58:47 +0000 (08:58 +1100)]
Removed early free on name_len
name_len was being freed too early and in a loop so
sometimes you would hit a double-free problem
The locale changes were to keep efence happy though
i suspect something strange was going on with locales there
too.
Martin Schwenke [Tue, 25 Feb 2014 19:55:21 +0000 (06:55 +1100)]
pstree: Ignore processes that disappear before reading cmdline
The worst case here is that the user has specific a PID on the
command-line, read_proc() fails to read cmdline for an irrelevant,
transient process and fails.
It is better to simply ignore processes that have disappeared. That
way pstree can provide useful output in more cases.
An alternative is to read cmdline only for processes that the user is
interested in. However, this probably increases the chances of an
interesting process exiting before the cmdline is read.
Signed-off-by: Martin Schwenke <martin@meltin.net>
Craig Small [Mon, 19 May 2014 12:56:50 +0000 (22:56 +1000)]
Fixed v4 versus v6 problem
fuser -n tcp 80 always worked because the v4 or v6 problem didnt hit
single ports, but any ipv4 or ipv6 remote address wouldn't work.
Caught by Coverity CID46269
Allan Wirth [Fri, 28 Feb 2014 22:09:19 +0000 (09:09 +1100)]
Full thread display for pstree an option
Commit [9de89a] made pstree show the correct thread names. This had
the unintended consequence of making a lot of thread views
uncompact, as the names would be different.
Allan suggested that if you want to see the real thread names, then
explictly ask for them. I agree and pstree now has a new option -t
for showing thread names.
Allan Wirth [Fri, 28 Feb 2014 22:09:19 +0000 (09:09 +1100)]
Full thread display for pstree an option
Commit [9de89a] made pstree show the correct thread names. This had
the unintended consequence of making a lot of thread views
uncompact, as the names would be different.
Allan suggested that if you want to see the real thread names, then
explictly ask for them. I agree and pstree now has a new option -t
for showing thread names.
Craig Small [Sun, 2 Feb 2014 06:02:36 +0000 (17:02 +1100)]
pstree: fclose fopened files
Commit [9de89a] uses fopen to find the tasks, but doesn't fclose
them afterward. Thanks for the anonymous and somewhat obscure
bug commenter for pointing it out.
Craig Small [Sun, 29 Sep 2013 05:16:08 +0000 (15:16 +1000)]
pstree shows threads correct names.
pstree would only show the process name, not the thread name. This
change now makes pstree read /proc/<PID>/task/<TID>/stat to find the
threads' real names.
$ pstree -p 1187
udisksd(1187)─┬─{udisksd}(1189)
├─{udisksd}(1191)
├─{udisksd}(1192)
├─{udisksd}(1195)
└─{udisksd}(27395)
./pstree -p 1187
udisksd(1187)─┬─{cleanup}(1195)
├─{gdbus}(1191)
├─{gmain}(1189)
├─{pool}(27395)
└─{probing-thread}(1192)
Craig Small [Tue, 16 Jul 2013 11:39:09 +0000 (21:39 +1000)]
pstree uses COLUMNS environement variable
pstree previously only used the window size for determining number of
columns, then a default of 132. With this change, pstree now checks
the COLUMNS environment variable first and uses that if valid.
env checking code nicked from top.c, by Jim Warner.
Han Pingtian [Thu, 20 Dec 2012 03:31:50 +0000 (11:31 +0800)]
doesn't complain about "not a directory"
If /proc/#/fd points to a path which has component removed, fuser
will complain like "Cannot stat file /proc/29322/fd/16: Not a
directory". Looks like it can be disabled just like commit 898dc70a1f
did.
Mike Frysinger [Tue, 19 Feb 2013 19:44:50 +0000 (14:44 -0500)]
use AC_CANONICAL_HOST
--host is used for the system where the compiled code will run.
--target is not the correct system to look that up.
http://www.gnu.org/software/autoconf/manual/html_node/Manual-Configuration.html#Manual-Configuration
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Craig Small <csmall@enc.com.au>
Craig Small [Sat, 6 Oct 2012 23:52:46 +0000 (10:52 +1100)]
pstree compiles with SE Linux
pstree failed to compile with SE Linux enabled because one of the
scontext was missed and without it enabled the bug doesn't appear.
pstree is now re-worked so scontext is defined as a dummy meaning
most of the code except the reall SE Linux specific stuff is compilied
meaning this sort of thing shouldn't happen too much again.
Craig Small [Fri, 31 Aug 2012 04:21:19 +0000 (14:21 +1000)]
fuser finds unix sockets
in check_dir() stat was replaced with device() which found the right
device but zeroed out the inode, making that check always fail. This
meant fuser never found unix sockets.
Craig Small [Fri, 31 Aug 2012 00:05:24 +0000 (10:05 +1000)]
pstree finds orphans
Commit 26f9b6c1553d021c0bf9dd85f0647dc6e210948d while fixing the missing
root pid problem introduced another problem where PIDs are out of order.
A process that has a lower PID than its PPID would appear twice with
the tree breaking in strange ways.
We now scan the entire process tree first then perform two checks
if PID==1 is missing add it
if a process has no parent, then make it a child of PID==1, either the
real one or the faked one made in step 1
As this is done after all procsses are found, we don't get the previous
breakage.
Craig Small [Thu, 30 Aug 2012 22:09:45 +0000 (08:09 +1000)]
fuser -m regression
While fuser -m /boot worked, fuser -m /dev/blah would show everything.
This was because the filesystem for /dev was added as a target, not the
filesystem /dev/blah.
This simple fix suggested by SF user hanpt works well.
Ref: https://sourceforge.net/tracker/?func=detail&aid=3559232&group_id=15273&atid=115273 Signed-off-by: Craig Small <csmall@users.sourceforge.net>