timeout
私は与えられた時間内にコマンド(例えば)を実行するためにbashスクリプトでこのユーティリティを使用していますtimeout -s SIGINT 500s ./my_script
。プロセスがmyscript
どのくらいのCPU /メモリを使用しているかを確認するために、プロセスを監視したい(たとえば、htop -p <pid>
コマンドを使用)。
プロセスがバックグラウンドで開始されると(を使用して&
)変数を検索して、プログラムで対応するpidを取得できることを知っています$!
。問題は、タイムアウトにより新しいサブプロセスが生成され、$!
変数を使用してmyscriptのpidではなく「timeoutの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"