2015-03-02 133 views
1

我編寫了一個shell腳本A,它在其中調用另一個腳本B.B做的是運行一些計算並創建一個文本文件。在調用shell腳本中終止正在運行的程序

我不擁有B的代碼,而A必須在前臺爲非技術原因調用它。

B需要不到1分鐘的時間來計算和創建文本,但B不會自行結束並將控制權返回給A直到6分鐘後。

現在用戶抱怨爲什麼需要7分鐘,運行腳本A.

所以我的問題是我怎麼能改寫立即檢測文件被創建,從而終止B到重新獲得控制?如果A仍然需要在前臺運行B?它可行嗎?

希望我已經說清楚了。

的感謝! 約翰

回答

2

這個腳本在後臺調用檢查文件是否存在,然後使用exec運行具有相同PID原始腳本的腳本(如PID與$$獲得),當文件被創建的殺菌作用的功能被髮送到該pid,然後exec'ed腳本被殺害:

#!/bin/bash 
function checkAndKill { 
    local pid=$1 
    local filename=$2 
    while [ ! -e $filename ]; do 
     sleep 1 
    done 
    kill $pid 
} 

checkAndKill $$ /path/of/the/file/to/check & 

exec B.sh