![获取 pid、给出 cmd 名称、网络连接、进程树、父级/祖级/子级的脚本](https://linux22.com/image/118035/%E8%8E%B7%E5%8F%96%20pid%E3%80%81%E7%BB%99%E5%87%BA%20cmd%20%E5%90%8D%E7%A7%B0%E3%80%81%E7%BD%91%E7%BB%9C%E8%BF%9E%E6%8E%A5%E3%80%81%E8%BF%9B%E7%A8%8B%E6%A0%91%E3%80%81%E7%88%B6%E7%BA%A7%2F%E7%A5%96%E7%BA%A7%2F%E5%AD%90%E7%BA%A7%E7%9A%84%E8%84%9A%E6%9C%AC.png)
可以,然后呢
我需要编写一个脚本,它将 pid 作为参数,并提供命令名称、与进程相关的各种网络连接,并且还将提供最多三个祖先进程和最多三代后代进程的信息。
我不想要这个问题的答案,但我确实想要一些指导,告诉我如何最好地让自己走上正确的道路来完成这个任务。
这就是我开始做的:
#!/bin/bash
#get pid from user
PID=$1
#echo pid and find a way to describe process to user
echo $PID #whatever it is = #whatever the command name is
#network portion
sudo netstat -p grep $PID
#this return information related to the process itself
ps -ef f|egrep "(UID|$PID)"
最后一行代码至少会返回一些对我来说有价值的东西:我可以获得一些与流程相关的信息,树状层次结构等等。
我不具备很多技术知识,所以我知道这段代码对于这项任务来说是否看起来很糟糕/无法使用。如果我需要从头开始并提出不同的想法,我会的。任何帮助或指导将不胜感激。
答案1
您可以通过以下方式获取父进程的PID:
PID=1234
ps -o ppid --no-headers -p "$PID"
或与
awk '/^PPid:/ { print $2 }' /proc/$PID/status
你可以将它放入一个变量中
PPID="$(awk '/^PPid:/ { print $2 }' /proc/$PID/status)"