Alw*_*ner 64 linux shell process child-process
是否可以从shell脚本中的父进程id获取子进程ID?
我有一个使用shell脚本执行的文件,这会导致一个新的进程process1(父进程).这个过程1已经分叉的另一个进程过程2(子进程).使用脚本,我可以使用以下命令获取process1的pid :
cat /path/of/file/to/be/executed
Run Code Online (Sandbox Code Playgroud)
但是我无法获取子进程的pid.
Ken*_*ent 55
我不确定我是否理解正确,这有帮助吗?
ps --ppid <pid of the parent>
Run Code Online (Sandbox Code Playgroud)
Goo*_*ofy 21
I'v written a scrpit to get all child process pids of a parent process. Here is the code.Hope it helps.
function getcpid() {
cpids=`pgrep -P $1|xargs`
# echo "cpids=$cpids"
for cpid in $cpids;
do
echo "$cpid"
getcpid $cpid
done
}
getcpid $1
Run Code Online (Sandbox Code Playgroud)
Bas*_*tch 14
shell进程是$$因为它是一个特殊参数
在Linux上, proc(5)文件系统提供了大量有关进程的信息.也许
pgrep(1)(访问/proc)也可能有所帮助.
因此,尝试cat /proc/$$/status获取shell进程的状态.
因此,可以用例如检索其父进程id
parpid=$(awk '/PPid:/{print $2}' /proc/$$/status)
Run Code Online (Sandbox Code Playgroud)
然后$parpid在脚本中使用以引用父进程pid(shell的父进程).
但我认为你不需要它!
阅读一些Bash指南(或谨慎的高级bash脚本指南,它有错误)和高级linux编程.
请注意,某些服务器守护程序进程(通常需要是唯一的)是显式写入其pid /var/run,例如 sshd服务器守护程序正在将其pid写入文本文件中/var/run/sshd.pid).您可能希望将这样的功能添加到您自己的类似服务器的程序中(用C,C++,Ocaml,Go,Rust或其他一些编译语言编写).
小智 6
ps -axf | grep parent_pid
Run Code Online (Sandbox Code Playgroud)
上面的命令打印从中生成的各个过程parent_pid,希望对您有所帮助。+++++++++++++++++++++++++++++++++++++++++++++
root@root:~/chk_prgrm/lp#
parent...18685
child... 18686
root@root:~/chk_prgrm/lp# ps axf | grep frk
18685 pts/45 R 0:11 | \_ ./frk
18686 pts/45 R 0:11 | | \_ ./frk
18688 pts/45 S+ 0:00 | \_ grep frk
Run Code Online (Sandbox Code Playgroud)
您可以通过阅读条目获取pids给定父进程的所有子进程。<pid>/proc/<pid>/task/<tid>/children
此文件包含第一级子进程的 pid。对所有儿童 pid 递归执行此操作。
有关更多信息,请访问https://lwn.net/Articles/475688/
| 归档时间: |
|
| 查看次数: |
146654 次 |
| 最近记录: |