如何根据PID查询子进程的当前工作目录?
查询子进程当前工作目录的正确方法
如果你的pwdx和lsof命令返回的是主脚本的目录,大概率是你使用了错误的PID——误将主进程的PID当成了陷入循环的子进程PID。先通过以下方式确认子进程的真实PID:
- 用
pgrep -f <子进程执行的具体命令>过滤出目标子进程的PID - 或者用
ps aux | grep <子进程命令>,手动区分主进程和子进程(注意排除grep自身的进程)
拿到正确的子进程PID后,用以下任意一种方法查询其当前工作目录:
方法1:读取/proc文件系统的符号链接(最可靠)
Linux系统的/proc文件系统会为每个进程维护一个目录,其中cwd是指向该进程当前工作目录的符号链接。执行:
readlink -f /proc/<子进程PID>/cwd
方法2:使用ps命令直接输出
如果你的ps命令支持扩展参数,可以直接指定输出当前工作目录:
ps -o pid,cwd -p <子进程PID>
方法3:正确使用pwdx命令
确保传入的是子进程的真实PID,而非主进程PID:
pwdx <子进程PID>
额外提示
如果子进程是由shell脚本启动的某个具体命令(而非脚本本身陷入循环),你需要找到那个具体命令的PID——可以用pstree -p <主脚本PID>查看进程树,找到主进程下的子进程分支,定位到陷入循环的进程。
内容的提问来源于stack exchange,提问作者Shaun Han
相关产品推荐
相关产品推荐

