[NTLUG:Discuss] keep grep command out of the results of a "ps | grep" *Solved but why?*
Richard
ntlug at rain4us.net
Thu Dec 11 16:02:18 CST 2008
Ok, so I want to see if a process is running. Grepping the results of
ps sounds like a simple issue. The problem is that executing grep with
the search terms will make the search always return true as it finds the
grep statement itself.
Now there is a solution to this problem that I already have, but I am at
a complete loss as to WHY it is working.
Let's say that we needed to see if the agetty process on tty2 was
running, executing the command:
ps awx | grep agetty.*tty2
...will ensure that we only extract the lines on which appear: agetty,
plus any character, any number of times, followed by tty2
This will leave us with TWO results that might look something like this:
3274 tty2 Ss+ 0:00 /sbin/agetty 38400 tty2 linux
15482 pts/1 S+ 0:00 grep agetty.*tty2
Now take this second command that can be executed.
ps awx | grep a\\getty.*tty2
..running the grep in that fashion causes ps to only return the agetty
process that is running and not the grep search process.
3274 tty2 Ss+ 0:00 /sbin/agetty 38400 tty2 linux
Why is that? the double backslash from the command line gets converted
and passed to grep as a single backslash which causes grep to escape the
g in agetty. What is it about escaping the 'g' that causes grep to
exclude the process that is doing the grep(For instance, process 15482
in the example above)? Why doesn't a\\getty match the agetty listed as
a parameter on the grep process line?
fwiw, running...
ps awx | grep 'a\getty.*tty2'
...works as well as the single backslash doesn't then have to be escaped.
--
Richard
More information about the Discuss
mailing list