作者 主題: shell script如何在一定時間後,去中斷一直執行不完的程式?  (閱讀 5245 次)

0 會員 與 1 訪客 正在閱讀本文。

wunyuan

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
寫了一個簡單的shell script

for a in 120 122 123 124 125
do
   for b in 5 6 7 8 9 10 11
   do
      cd $path$a/$b
      ns ./multich-tag.tcl
      awk -f ./parse.awk ./multich_adhocin.tr > data.txt
   done
done


我在執行ns ./multich-tag.tcl  這一行去呼叫NS2模擬網路環境時,因為ns2寫的不好,有時候會卡住無法結束ns2
造成沒辦法繼續執行awk -f ./parse.awk ./multich_adhocin.tr > data.txt 這一行
因此想請問各位前輩,shell script有沒有辦法去判斷在某個時間之後,如果還一直卡住不動,是否能夠中斷,然後繼續執行下一步

wenlien1001

  • 訪客
You can try it run the "ns" in the background,
then detect the ns if finish or not, and use one flag to terminate it.
PS1. I like to use bash, please modify the sheel if needed.
PS2. I use "sleep" instead of "ns".

代碼: [選擇]
#!/usr/bin/bash -vx
declare -i nLimit=10
declare -i count=0
sleep 100&
while true
do
  [ -z "`pgrep sleep`" ] && break
  sleep 1
  [ $nLimit -eq $count ] && pkill -9 sleep && break
  count=$count+1
done
pgrep -l sleep

wish this helps.

regards,

Stanley Huang
« 上次編輯: 2009-09-06 19:03 由 wenlien1001 »

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
不知道這樣可以不:

1.sh
代碼: [選擇]
pid=$$
(sleep 60; kill $pid) &

for a in 120 122 123 124 125
do
   for b in 5 6 7 8 9 10 11
   do
      cd $path$a/$b
      ns ./multich-tag.tcl
      awk -f ./parse.awk ./multich_adhocin.tr > data.txt
   done
done

2.sh
代碼: [選擇]
./1.sh
rtv=$?
if [ $rtv -eq 143 ]
then
     ....
     ....
fi

沒試過哦...

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
應該去解決有問題的程式為何卡住才對.