首页 > 代码库 > 进程管理的简单命令 pidof lsof
进程管理的简单命令 pidof lsof
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
进程管理的简单命令 pidof lsof