在银河麒麟V10中,定位占用软件的进程首选lsof命令反查文件调用,其次用pgrep+ldd组合分析隐式依赖,服务类软件则通过systemctl查看单元依赖与进程树。

在银河麒麟V10系统中,当某个软件无法正常退出、卸载失败或疑似被其他进程占用时,需精准定位哪些进程正在调用该软件的可执行文件或共享库,否则强行终止可能导致服务中断或数据异常。
通过lsof命令反查打开该软件文件的进程
这是最直接有效的方法,适用于已知软件主程序路径(如/usr/bin/firefox)或关键动态库路径(如/lib/x86_64-linux-gnu/libcurl.so.4)的场景。
1、打开终端,执行:lsof /path/to/executable_or_library,例如:lsof /usr/bin/filezilla 或 lsof /usr/lib/libwx_baseu-3.2.so.0。
2、若提示command not found,先安装:sudo apt install lsof。
3、输出结果中,第一列(COMMAND)为调用该文件的进程名,第二列(PID)为进程号,第七列(NAME)显示被打开的具体路径。注意区分“当前工作目录”和“内存映射库”——后者才是真正的依赖调用关系。
4、若需排除自身shell进程干扰,可在命令末尾加| grep -v "lsof"过滤掉lsof自身条目。
通过pgrep + ldd组合定位隐式依赖进程
某些软件启动后会动态加载插件或子模块,其主进程名与可执行文件名不一致(如vscode启动后存在多个code进程),此时需先确认所有相关进程,再逐个检查其链接库。
方法一:查进程→提路径→验依赖
① 使用pgrep模糊匹配进程名:pgrep -f "filezilla" 或 pgrep -f "clion",获取PID列表。
② 对每个PID提取其可执行路径:readlink -f /proc/<strong>【PID】</strong>/exe,替换【PID】为实际数字,这一步必须执行,因为很多进程会通过符号链接或硬链接启动,真实路径可能藏在/usr/lib/或/opt/下。
③ 对上步得到的真实路径执行:ldd <strong>【real_path】</strong> | grep "so\|lib",观察是否包含你关心的库名,从而确认是否存在间接依赖。
方法二:快速筛查所有进程中是否加载某库
执行:for pid in $(ls /proc | grep '^[0-9]*$'); do if ls -l /proc/$pid/exe 2>/dev/null | grep -q "filezilla"; then ldd /proc/$pid/exe 2>/dev/null | grep "libwx"; fi; done 2>/dev/null,该命令会遍历全部进程,仅对名称含filezilla的进程执行ldd并筛选libwx相关项——适合排查GUI软件的wxWidgets库依赖链。
使用systemctl查看服务类软件的依赖关系
若该软件以systemd服务形式运行(如nginx、postgresql),其依赖进程通常由服务单元文件明确定义,而非运行时动态加载。
1、先确认服务名:systemctl list-units --type=service | grep -i "software_name",例如:systemctl list-units --type=service | grep -i "mysql"。
2、查看该服务的依赖声明:systemctl show <strong>【service_name】</strong>.service --property=Wants --property=Requires --property=After,替换【service_name】为实际服务名(如mysql),输出将列出它显式要求启动的其他服务单元。
3、若需查看该服务启动时实际拉起的子进程树,执行:systemctl status <strong>【service_name】</strong>.service --no-pager,重点关注“Main PID”及其下方的“CGroup”路径,再用ps --forest -g <strong>【cgroup_pid】</strong>展开完整进程树。

















