- 締切済み
シェルスクリプトでお聞きしたいのですが
たとえばシェルスクリプト内であるジョブを実行して、 それが一時間以内に終了しなければそのジョブを削除する ということはできるのでしょうか? アドバイスいただけると幸いです 宜しくお願いいたします
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tthe_mine
- ベストアンサー率46% (19/41)
回答No.2
最後に fork したプロセスの pid が $! で取れます。 ある pid をもつプロセスがいるかどうかは kill -0 pid したときの戻り値($?)で判定できます。 #!/bin/sh wait_time="10" cmd1="aaa" cmd2="bbb" $cmd1 pid1=$! $cmd2 pid2=$! sleep $wait_time kill -0 $pid1 2> /dev/null && kill -9 $pid1 # 生きてたら殺す kill -0 $pid2 2> /dev/null && kill -9 $pid2
- ham_kamo
- ベストアンサー率55% (659/1197)
回答No.1
実行するジョブが1つだけなら、 #!/bin/sh hogehoge & sleep 3600 if [ `jobs|grep Running|wc -l` -ne 0 ]; then kill %1 fi みたいな感じでできるかと。 実際にはkillしたときにはログを出すとか、適当にいじる必要があると思いますが。
質問者
お礼
アドバイスありがとうございました なるほどスリープで待てばいいのですね! 参考に作ってみます ありがとうございました
お礼
アドバイスありがとうございました なるほどとても参考になります! $!でpidを取得すればいいのですね killにこのような使い方があるとは知りませんでした ありがとうございました