最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

linux 进程实际场景中你不知道的事情

XAMPP新闻 admin 413浏览 0评论

# 我们应该承认我们的浮躁,浮躁到只会空想,一切都不应是计划,而是脚踏实地的努力,做我们应该去做的,一定会有不一样的风景。

 

友情提示:

阅读本文,能收获根据PID找到程序的运行绝对地址与运行目录的方法。

关注即可收获更多Linux实用知识。

实际场景:

当我需要找一个进程的运行路径,重新执行或者查看程序路径的一些相关问题的时候,总是不能知道执行程序的位置。

 

解决办法:

利用Linux中的proc文件中的PID号文件, 查到我们想要的信息。

 

我们知道,平常查看一个进程可以使用ps 或者 top查看,但你知道如何根据PID找到进程的运行路径吗?

#查看系统所有的进程数据
ps aux
#查看进程树状态
ps axjf
#top动态查看进程的变化
top -d 2      #每两秒更新一次top
top -p  PID   #查看某些个PID进行检测

PID(进程中的描述符)。其实可以通过PID获取到进程的很多信息。比如执行程序的绝对路径,进程的运行目录…

 

# 找到server进程的PID

#运行一个TCP server
 ./server
Accepting connections ...

ps aux | grep server
输出:
nx        6069  0.4  0.2 1738028 89012 ?       Ssl  09:05   0:14 /usr/NX/bin/nxserver.bin --daemon
racobit   7312  0.0  0.0   2164   560 pts/0    S+   09:53   0:00 ./server
racobit   8860  0.0  0.1 928884 62472 ?        Sl   09:06   0:00 /usr/lib/evolution/evolution-calendar-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.Calendarx8604x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/Calendar/8604/2
racobit   8888  0.0  0.0 817756 26812 ?        Sl   09:06   0:00 /usr/lib/evolution/evolution-addressbook-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess.Backend.AddressBookx8873x2 --own-path /org/gnome/evolution/dataserver/Subprocess/Backend/AddressBook/8873/2
racobit   9946  0.0  0.0   9068   696 pts/1    S+   09:54   0:00 grep --color=auto server
racobit  11982  0.3  0.1 474560 41272 ?        Rsl  09:30   0:04 /usr/lib/gnome-terminal/gnome-terminal-server
#找到我们想要的server是7312

 

# 拓展 /proc目录详解

Linux的/proc目录是一种/proc伪文件系统,存储了当前内核运行状态的一系列特殊文件,可以通过这些文件查看正在运行进程的信息。该目录包含许多以运行进程号命名的子目录。

#列出server进程 7312的信息
 ll /proc/7312
total 0
dr-xr-xr-x   9 racobit racobit 0 7-р с 26 09:53 ./
dr-xr-xr-x 428 root    root    0 1-р с  1  1970 ../
dr-xr-xr-x   2 racobit racobit 0 7-р с 26 09:59 attr/
--w-------   1 racobit racobit 0 7-р с 26 09:59 clear_refs
-r--r--r--   1 racobit racobit 0 7-р с 26 09:53 cmdline
-rw-r--r--   1 racobit racobit 0 7-р с 26 09:53 comm
-rw-r--r--   1 racobit racobit 0 7-р с 26 09:59 coredump_filter
-r--r--r--   1 racobit racobit 0 7-р с 26 09:59 cpuset
lrwxrwxrwx   1 racobit racobit 0 7-р с 26 09:59 cwd -> /home/racobit/jiafeng/TCP_Agent/Test/
-r--------   1 racobit racobit 0 7-р с 26 09:59 environ
lrwxrwxrwx   1 racobit racobit 0 7-р с 26 09:59 exe -> /home/racobit/jiafeng/TCP_Agent/Test/server*
dr-x------   2 racobit racobit 0 7-р с 26 09:59 fd/...
# cwd -- 指向当前进程运行目录的一个符号链接
# environ -- 当前进程的环境列表
# exe -- 指向启动当前进程的可执行文件绝对路径的符号链接。
# fd -- 包含当前进程打开每一个文件描述符

 

通过列出proc目录下进程号的内容,我们可以知道server进程运行目录,执行程序的绝对路径。

cwd -> /home/racobit/jiafeng/TCP_Agent/Test/
exe -> /home/racobit/jiafeng/TCP_Agent/Test/server*

 

上面我们知道,cwd与exe是建立了软链接,那么就可以使用readlink读出符号所指向的位置啦!

#由进程名获取进程PID
pidof server
输出:
7312
#读取exe与cwd的所链接的内容
readlink /proc/7312/cwd
输出进程的运行目录:
/home/jiafeng/TCP_Agent/Test

readlink /proc/7312/exe
输出进程可执行程序的绝对路径:
/home/jiafeng/TCP_Agent/Test/server

读出可执行程序执行目录的用途:

· shell脚本中处理可执行程序目录下的文件

· 找到进程的执行目录

 

End 2021/8/27 22:15

做我们应该做的,你会看到不一样的风景。

 

当你以为为时已晚的时候,恰恰是最早的时候,此时关注即可收获更丰富的Linux实际开发知识。

转载请注明:XAMPP中文组官网 » linux 进程实际场景中你不知道的事情

您必须 登录 才能发表评论!