• 締切済み

シェルスクリプトでお聞きしたいのですが

たとえばシェルスクリプト内であるジョブを実行して、 それが一時間以内に終了しなければそのジョブを削除する ということはできるのでしょうか? アドバイスいただけると幸いです 宜しくお願いいたします

みんなの回答

  • 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

toshi_t
質問者

お礼

アドバイスありがとうございました なるほどとても参考になります! $!でpidを取得すればいいのですね killにこのような使い方があるとは知りませんでした ありがとうございました

  • 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したときにはログを出すとか、適当にいじる必要があると思いますが。

toshi_t
質問者

お礼

アドバイスありがとうございました なるほどスリープで待てばいいのですね! 参考に作ってみます ありがとうございました