Why pidof and pgrep are behaving differently?
pidof = find the process ID of a running program
Pidof finds the process id's (pids) of the named programs. It prints those id's on the standard output. This program is on some systems used in run-level change scripts, especially when the system has a System-V like rc structure.
sysadmin@codewarden:~$ pidof apache2
5098 5095 5094 5092
pgrep = look up or signal processes based on name and other attributes, pgrep looks through the currently running processes and lists the process IDs which matches the selection criteria.
sysadmin@codewarden:~$ pgrep apache2
5092
5094
5095
5098
pgrep
, (p) = process, grep
= grep prints the matching lines
Want to know more about pgrep & pidof ? Just run in terminal as
# man pidof
# man pgrep
Related videos on Youtube
Pigueiras
Oh you reached my profile! Hello! I come from Spain and I work at CERN, in Switzerland. You can reach me out if you want to contact me through: Careers Linkedin Twitter Thanks for reading!
Updated on September 18, 2022Comments
-
Pigueiras almost 2 years
I have a init script in
/etc/init.d/myservice
for initialize a service like this:... start() { ... daemon /usr/sbin/myservice ... } stop() { ... pgrep myservice pidof myservice ps -ef | grep myservice ... }
And when I try to stop the service, this is the output:
10000 10001 10000 root 10000 1 0 09:52 ? 00:00:02 /usr/sbin/myservice root 9791 9788 0 10:06 pts/1 00:00:00 /bin/sh /sbin/service myservice stop root 10001 9791 1 10:06 pts/1 00:00:00 /bin/sh /etc/init.d/myservice stop root 9805 9796 0 10:06 pts/1 00:00:00 grep myservice
Is this expected? Why
pidof
is returning only the correct PID of the service that I want to stop andpgrep
is returning the service PID and the PID of the init script? Can I rely on thatpidof
will always ignore the PID from the init script? -
Pigueiras over 10 yearsAha, that is why
pidof
is not returning10001
, because the program issh
, no? -
Babin Lonston over 10 yearsyeap, you right
-
Pigueiras over 10 yearsBut in this case I can rely on it no?, I am not using an interpreter to execute the program (it is a executable binary).
-
cuonglm over 10 yearsOf course. But I think the good way is use
killproc
. Why you don't use this while you haved useddaemon
instart
function? -
Pigueiras over 10 yearsBecause I want to get the PID to kill the children of the process, I was using
killproc
to kill the process itself. -
Pigueiras over 10 yearsNo, I don't think so: stackoverflow.com/questions/8533377/…
-
cuonglm over 10 yearsJust pass signal
-9
tokillproc
. -
Pigueiras over 10 yearsThe
-9
is too aggressive for me :D