簡體   English   中英

防止bash腳本掛起

[英]Prevent bash script from hanging

假設我有以下代碼的bash腳本:

function test() {
  some_code
  ...
  make
  some_code
}

test
some_other_code

test()可以包含任何可能運行不合理時間的代碼。

我正在嘗試使用類似:

function test() {
  cd $WORK_FOLDER
  make
}

run_timeout()
{
local timeout=$1
$2 &
local pid=$!
while ps $pid >/dev/null && [ $timeout -ne 0 ]; do
  sleep 1
  let timeout--  
done  
kill -9 $pid 2>/dev/null && echo "Process $pid killed because executed too long"
}

run_timeout 15 "test"
run_timeout 5 "test"

但是make在估計的時間后仍在運行。

有什么建議如何解決這個問題?

有沒有什么技術可以防止bash腳本掛起?

我猜$ 2&是您在運行long函數的地方嗎? 我在同一時間遇到了同樣的問題,具體取決於函數中的內容,您將有多個過程……我不知道我的解決方案是否是實現此目標的最佳方法,但是它對我有用。

變化:

$2 &

為:

awk '{system($2)}' &

這樣,pid = $! 將為您提供awk pid,並通過殺死awk來殺死整個過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM