linux如何根据文件描述符获取pid
时间: 2023-10-18 08:06:30 浏览: 265
linux进程.md
可以使用Linux系统中的`/proc`虚拟文件系统获取文件描述符所属进程的PID。
具体操作如下:
1. 使用`lsof`命令获取文件描述符对应的文件路径,例如`lsof -p <pid> -a -d <fd>`,其中`<pid>`为进程的PID,`<fd>`为文件描述符。
2. 利用`readlink`命令获取文件的真实路径,例如`readlink /proc/<pid>/fd/<fd>`。
3. 根据文件的真实路径,在`/proc`目录下查找该文件所属的进程的PID,例如`ls -l /proc/<pid>/cwd`。
示例代码如下:
```bash
#!/bin/bash
# 文件描述符
fd=3
# 获取文件路径
file_path=$(lsof -p $$ -a -d $fd | awk 'NR==2 {print $NF}')
# 获取文件的真实路径
real_path=$(readlink -f $file_path)
# 获取文件所属进程的PID
pid=$(ls -l /proc/*/cwd 2>/dev/null | grep $real_path | awk -F '/' '{print $(NF-1)}')
echo "文件描述符 $fd 对应的文件路径为 $file_path"
echo "文件 $file_path 的真实路径为 $real_path"
echo "文件 $real_path 所属进程的PID为 $pid"
```
其中`$$`表示当前进程的PID。
阅读全文