Why pidof and pgrep are behaving differently?

10,966

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
Share:
10,966

Related videos on Youtube

Pigueiras
Author by

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, 2022

Comments

  • Pigueiras
    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 and pgrep is returning the service PID and the PID of the init script? Can I rely on that pidof will always ignore the PID from the init script?

  • Pigueiras
    Pigueiras over 10 years
    Aha, that is why pidof is not returning 10001, because the program is sh, no?
  • Babin Lonston
    Babin Lonston over 10 years
    yeap, you right
  • Pigueiras
    Pigueiras over 10 years
    But 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
    cuonglm over 10 years
    Of course. But I think the good way is use killproc. Why you don't use this while you haved used daemon in start function?
  • Pigueiras
    Pigueiras over 10 years
    Because I want to get the PID to kill the children of the process, I was using killproc to kill the process itself.
  • Pigueiras
    Pigueiras over 10 years
  • cuonglm
    cuonglm over 10 years
    Just pass signal -9 to killproc.
  • Pigueiras
    Pigueiras over 10 years
    The -9 is too aggressive for me :D