pipe does not behave like
;. It starts both the processes together. Which is why the
grep command showed up too. So when you gave
ps aux | grep myprocess , the
ps aux included the
grep myprocess, so the grep included that in its output.
To check this, I gave two
dd commands on my test server like this:
[sreeraj@server ~]$ dd if=/dev/urandom of=/home/sreeraj/myfile1 bs=1M count=1024 | dd if=/dev/urandom of=/home/sreeraj/myfile2 bs=1M count=1024
And when I checked for the
dd process, it shows that it both has started at the same time(look at the coloumn that says 2:55 minutes has elapsed) :
[sreeraj@server ~]$ ps aux | grep 'dd if'
sreeraj 14891 100 0.2 5376 1416 pts/0 R+ 11:56 2:55 dd if=/dev/urandom of=/home/sreeraj/myfile1 bs=1M count=1024
sreeraj 14892 100 0.2 5376 1412 pts/0 R+ 11:56 2:55 dd if=/dev/urandom of=/home/sreeraj/myfile2 bs=1M count=1024
sreeraj 14936 0.0 0.1 9032 672 pts/1 S+ 11:59 0:00 grep --color=auto dd if
Now, if you want to exclude the grep from getting outputted, use regex. It will exclude the
grep from the result:
ps aux | grep "[m]yprocess"
For example, if you are looking for httpd process, use:
ps aux | grep "[h]ttpd"
But I suggest you use
pgrep -a, which will be more reliable.
[sreeraj@server ~]$ pgrep -a httpd
8507 /usr/sbin/httpd -DFOREGROUND
8509 /usr/sbin/httpd -DFOREGROUND
8510 /usr/sbin/httpd -DFOREGROUND
8511 /usr/sbin/httpd -DFOREGROUND
8513 /usr/sbin/httpd -DFOREGROUND
8529 /usr/sbin/httpd -DFOREGROUND