Re:Kill -0
by tptacek on Friday March 27, 2009 @03:53PM
(#535636)
kill(pid, 0) is also a classic trick for detecting crappy rootkits; cycle through all ~65k possible pids, and see if the ESRCH results agree with "ps -axo pid". A patched ps, a patched KVM library, or even a patched procfs can still miss the code path used by the kill(2) syscall.
Re:Kill -0
by gcheong on Friday March 27, 2009 @03:06PM
(#535576)
When I read that, I thought why didn't I know about this? So I checked the man page (not that I often read the man pages) and, at least on the version for my Mac, the man page doesn't describe signal zero. Sigh. How do people find out about these things?
Re:Kill -0
by aminuit on Friday March 27, 2009 @03:44PM
(#535623)
You learn these things when you are a junior X from someone who is a senior X who learned it the exact same way. I bet you can trace these little nuggets all the way back to some junior sysadmin who was looking over Ken Thompson's shoulder at Bell Labs in the early 70s. Other examples include lsof, vmstat, netstat -p, and doing anything useful in a Makefile.
Re:Kill -0
by chiffonade on Sunday March 29, 2009 @12:11AM
(#537096)
I'm guessing a zombie'd process won't respond either. Which is good if you are checking for validity of a process and not just the mere presence of a pid in the process list.
Empiric lore is ultimately detrimental to genuine understanding.
'A value of 0, however, will cause error checking to be performed (with no signal being sent). This can be used to check the validity of pid.'
On Mac OS X, the actual kernel implementation is: if (uap->signum) psignal(p, uap->signum);
So if signum == 0, no signal is sent, but this occurs after the destination (and permissions) are checked for validity.