This will seem really simple to those that know about these things, but hey I’m easily amused.
Here is a snippet from an /etc/init.d script
HTTPD=/httpd/bin/httpd PIDFILE=/httpd/logs/httpd.pid if pidof $HTTPD | tr ' ' '\n' | grep -w $(cat $PIDFILE); then return 0 fi
What I’m interested in is the pidof (Process ID of) command and the way that you chain common linux utilities to get a result
Get a list of the PID’s of the httpd binary
$ pidof httpd 15600 5702 5696
They present as a flat list so use tr to translate the spaces into newlines. Which is similar to an excel paste with transpose.
$ pidof httpd | tr ' ' '\n' 15600 5702 5696
Finally use grep to find the pid of the parent process as stored in the PID file.
The -w switch in grep is very cool it says find whole words so you won’t match watch you are looking for on a substring (e.g. ‘123’ will only match ‘123’ it won’t match ‘1234’)
$ pidof httpd | tr ' ' '\n' | grep -w $(cat /httpd/logs/httpd.pid) 5696
Interestingly with tr you can go from a newline separated (stacked) list to a space separated (flat) list
# if a file named stacked contains 1 2 3 4 # then you can turn it back into a flat list using tr $ cat stacked | tr '\n' ' ' 1 2 3 4