通过PID找到对应的文件地址
时间: 2024-03-10 21:47:12 浏览: 131
在Linux系统中,可以通过`/proc`文件系统来查找某个进程对应的文件地址。具体步骤如下:
1. 打开终端,输入以下命令查找到对应的PID:
```
ps -ef | grep 应用名
```
这里的“应用名”是你要查找的应用的名称,也可以使用应用的关键字来进行查找。
2. 在输出结果中找到你要查找的应用的PID。
3. 输入以下命令查找到对应的文件地址:
```
ls -l /proc/PID/cwd
```
这里的“PID”是第二步中查找到的应用的进程ID。
4. 在输出结果中查找到你要查找的应用对应的文件地址。
`/proc/PID/cwd`是一个符号链接,它指向当前运行进程的工作目录。如果你想查找进程所打开的文件,可以查找`/proc/PID/fd`目录下的文件符号链接。例如,如果你想查找某个进程打开的日志文件,可以输入以下命令:
```
ls -l /proc/PID/fd | grep 日志文件名
```
这里的“日志文件名”是你要查找的日志文件的名称。在输出结果中,你可以找到对应的文件符号链接,然后通过该链接找到实际的文件地址。
相关问题
用shell写一个脚本,监测运行的flink任务,通过运行的进程名判断挂掉的flink任务,并通过进程名找到/目录下对应的配置文件,重新启动flink
### 回答1:
以下是一个简单的shell脚本,可以实现以上所描述的功能:
```
#!/bin/bash
# 监测flink任务进程名
process_name="flink"
# 获取所有运行的flink进程的pid
pids=$(ps -ef | grep $process_name | grep -v "grep" | awk '{print $2}')
# 循环处理所有pid
for pid in $pids
do
# 通过pid获取进程名
process_name=$(ps -ef | grep $pid | awk '{print $8}')
# 判断进程是否挂掉
if [ ! -d "/proc/$pid" ]
then
# 找到对应的配置文件
config_file=$(find / -name "${process_name}.conf")
# 重新启动flink
flink run -c $process_name $config_file
fi
done
```
该脚本每次运行时会检测运行的flink任务的pid,如果发现某个任务的pid对应的进程不存在,则认为该任务已经挂掉,并通过进程名找到对应的配置文件,重新启动该任务。
### 回答2:
要通过shell脚本监测运行的flink任务,并重新启动挂掉的任务,可以按照以下步骤编写脚本:
1. 获取所有正在运行的flink任务的进程名:
```shell
ps -ef | grep "flink" | grep -v "grep" | awk '{print $8}' | grep -oE "[^/]+$"
```
这个命令会列出所有包含"flink"关键字的进程,并提取进程名称。
2. 遍历所有进程名,判断是否挂掉:
```shell
for process in $(ps -ef | grep "flink" | grep -v "grep" | awk '{print $8}' | grep -oE "[^/]+$"); do
if ! kill -0 "$(pgrep "$process")" >/dev/null 2>&1; then
# 进程已经不存在,需要重新启动
# 根据进程名找到对应的配置文件,并重新启动flink任务
config_path="/目录/$process.conf"
flink run -c com.example.MainClass $config_path
fi
done
```
在这个循环中,我们首先使用`kill -0`命令来检查进程是否存在。如果返回非0值,表示进程已经不存在,然后可以使用进程名找到对应的配置文件,并使用`flink run`命令重新启动flink任务。
3. 将上述脚本保存为一个.sh文件,并增加执行权限:
```shell
chmod +x restart_flink.sh
```
4. 使用cron或其他定时任务工具,定时运行该脚本:
```shell
crontab -e
```
在cron的配置文件中,添加如下行来每分钟自动运行脚本:
```
* * * * * /path/to/restart_flink.sh
```
这样,脚本就会每分钟自动运行一次,监测并重新启动挂掉的flink任务。
### 回答3:
要编写一个用于监测运行的flink任务并重新启动挂掉的任务的Shell脚本,可以按照以下步骤进行:
1. 获取当前正在运行的flink任务的进程名。可以使用`ps`命令结合`grep`和`awk`命令来查找正在运行的flink任务的进程名。命令示例:`pid=$(ps -ef | grep "java -classpath" | grep -v grep | awk '{print $2}')`。
2. 判断flink任务是否挂掉。可以使用`kill -0`命令通过进程名来判断flink任务是否正在运行。命令示例:`kill -0 $pid`。如果命令执行成功,表示flink任务仍在运行;如果命令执行失败,表示flink任务已经挂掉。
3. 如果flink任务挂掉,重新启动任务。可以使用`nohup`和`java`命令来重新启动flink任务。命令示例:`nohup java -classpath /path/to/your/flink.jar:$FLINK_HOME/lib/* com.example.YourFlinkTask > /dev/null 2>&1 &`。其中`com.example.YourFlinkTask`是你要启动的flink任务的主类名,`/path/to/your/flink.jar`是flink任务的JAR包路径,`$FLINK_HOME/lib/*`是flink所需的所有依赖JAR包的路径。
4. 通过进程名找到对应的配置文件。可以在flink任务启动时通过命令行参数指定配置文件的路径,再在脚本中使用这个参数来定位配置文件。
结合以上步骤,可以编写一个Shell脚本来完成监测和重新启动flink任务的功能。最后,可以将该脚本设置为定时任务,以便定期检查和重新启动flink任务。
1.编写ps的命令查看当前操作系统所有进程任务的信息 PID PPID STAT COMMAND /proc/21/status 纯数字的文件夹都对应一个进程 1. 遍历目录(/proc) 2. 找到纯数字的目录名称 3. /proc/21/status 4. 读文件,解析 5. 打印
以下是对应纯数字目录下的进程信息:
PID:进程ID
PPID:父进程ID
STAT:进程状态(如S 表示休眠状态,R 表示正在运行,Z 表示僵尸状态等)
COMMAND:进程的命令名称
您可以使用以下命令来查看这些信息:
ps aux | awk '{print $2,$3,$8,$NF}' | grep -v PID
注意:这个命令不是一个完整的代码,您需要在您的操作系统上调整一些东西才能使其正常工作。
阅读全文