我在 bash 脚本中使用该timeout
实用程序在给定时间内运行命令(例如timeout -s SIGINT 500s ./my_script
)。我想监视进程myscript
以查看它使用了多少CPU/内存(例如使用htop -p <pid>
命令)。
我知道当一个进程在后台启动时(使用&
),我可以通过检索变量以编程方式获取其 pid $!
。问题是超时会产生一个新的子进程,并且使用$!
变量我得到“超时的 pid”,而不是 myscript 的 pid。
如何检索超时产生的子进程的 pid?
答案1
给timeout
一个启动脚本的机会,然后询问ps
其父进程是timeout
:
timeout -s SIGINT 500s ./my_script &
bgpid=$!
sleep 1
p=$(ps -o pid= --ppid "$bgpid")
echo The pid you want is: "$p"