pidof 的使用

pidof()是一个常用函数,也可以当做指令来使用。

-rw-r--r--. 1 root root 1779 Apr 17 23:37 zombile.c

[root@localhost program]# ./zombile

child_process start with pid: 44846

在c++里可以使用Pidof来获得当前的进程号码。

 printf("process start with pid: %d\n", getpid());


也可以使用

[root@localhost ~]# pidof zombile

44846 44845


对于shell脚本来说,要加参数-x

[root@localhost ~]# pidof test.sh

[root@localhost ~]# pidof -x test.sh

49685



lsof   list open files 用来查看进程打开的文件


Linux系统中,系统为了方便管理进程,会在/proc下为每一个运行中的进程创建一个目录,目录名就是进程号,而在进程的目录下有一个叫做fd的目录,这个目录下存放的是进程打开的所有文件。而lsof命令搜寻的其实就是/proc/$PID/fd下面的文件


lsof的集中常见应用

1.找到打开某文件的进程。lsof后边直接加文件的名字

[root@localhost log]# lsof /var/log/messages

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME

rsyslogd 1893 root    1w   REG    8,2   236408 392031 /var/log/messages


2.通过文件描述符定位进程和文件。

由于特殊的文件描述符有特殊的含义,比如0.1.2.可以查看所有用了这些文件描述符的进程。

以2为例子

[root@localhost log]# lsof -d 2|head

COMMAND    PID      USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME

init         1      root    2u   CHR    1,3      0t0   4601 /dev/null

udevd      504      root    2u   CHR    1,3      0t0   4601 /dev/null


能够查到所有使用了2文件描述符的进程

3.通过进程定位文件


[root@localhost log]# ps -ef |grep rsy

root       1893      1  0 12:39 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5   查到进程号PID是1893

[root@localhost log]# lsof -p 1893

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF       NODE NAME

rsyslogd 1893 root  cwd    DIR                8,2     4096          2 /

rsyslogd 1893 root  rtd    DIR                8,2     4096          2 /

rsyslogd 1893 root  txt    REG                8,2   391360     141929 /sbin/rsyslogd

rsyslogd 1893 root  mem    REG                8,2    27232     782197 /lib64/rsyslog/imklog.so

rsyslogd 1893 root  mem    REG                8,2   339960     782203 /lib64/rsyslog/imuxsock.so

即查到1893进程打开的所有文件。

4.查某一用户打开的文件

[root@localhost log]# lsof -u root |head

COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME

init         1 root  txt       REG                8,2   150352     130392 /sbin/init

init         1 root  mem       REG                8,2    65960     781859 /lib64/libnss_files-2.12.so


5.查占用某一端口的进程

[root@localhost log]# lsof -i:48323

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

local   3158 postfix   14u  IPv4  26489      0t0  UDP *:48323