2017-08-03 8 views
-1

私は少し質問があります。私は適切な解決策を見つけることができないので、誰かが私を助けてくれることを願っています。他のプロセスがLinuxで終了したときにバックグラウンドプロセスを終了させます

ホスト名を解決したい。その結果を待つ間に、シェルスクリプトコマンド、好ましくは組み込みコマンドやユビキタスシステムコマンドで30秒以上かかると通知を出したいと思います。

私はスリープしてからメッセージを印刷するバックグラウンドプロセスを持っています。睡眠中にプロセスはpingを実行しますが、pingが終了した後にバックグラウンドプロセスを強制終了する方法を理解することはできず、大きなスクリプトの一部であるため、30秒の時間制限より前にpingが終了してもメッセージは印刷され続けます実行には時間がかかります。ここで

は、私が使用してきたコードです:

((sleep 30; echo "Querying the DNS server takes more than 30 seconds.") & ping -q -c 1 localhost >/dev/null) 

私は非常に任意およびすべてのヘルプをいただければ幸いです。その他のソリューションも歓迎します。私はちょうどDNSが遅すぎることをユーザーに伝えたい、そして、これはそれ以上の実行に影響を与えます。私はping -wまたは-Wを試しましたが、これは解決時間を測定していません。私はpingから結果をトラップしようとしました。同じGPIDですべてのプロセスを強制終了しようとしましたが、コンソールも強制終了しています。私はスクリプトでは最高ではない、多分これは私に多くの時間がかかる理由です。前もって感謝します。

+0

これはhttps://superuser.com/の質問のようです。 – Veltro

+0

私はあなたの問題を理解していません。なぜあなたは "いくつかのホスト名を解決する"と話し、後に "ping"について話します。 – Jdamian

+0

somehostにpingを実行すると、ping自体の前にホストが何らかのIPに解決されます。私はdigやhostの代わりにpingコマンドを使用します(コアパッケージの一部ではありません)。 –

答えて

1

私はこのアプローチがあなたに役立つことを願っています。私は、おそらく "bc"を除いてすべてがかなり移植性が高いと思います。必要に応じて「bc-less」バージョンを提供できます。がんばろう!

#!/bin/bash 

timeout=10; ## This is how long to wait before doing some batshit! 
printed=1; ## this is how many times you want the message displayed (For #instance, you might want a message EVERY X seconds)       
starttime="$(date +%F) $(date +%T.%3N)" 

################### HERE GOES YOUR BACKGROUND PROCESS 
sleep 30 & 
####################################################### 
processId=$! ## And here we got the procees Id 
####################################################### 

while [ ! -z "$(ps -ef | grep $processId | grep -v grep)" ] 
do 
    endtime="$(date +%F) $(date +%T.%3N)"; 
    timeelapsed=$(echo " $(date -d "$endtime" "+%s") - $(date -d "$starttime" "+%s") " | bc); 
    if [[ ($timeelapsed -gt $timeout) && ($printed -ne 0) ]] 
    then 
      echo "This is taking more than $timeout seconds"; 
      printed=$((printed - 1)); 
      starttime="$(date +%F) $(date +%T.%3N)" 
     fi 
done 


    ### Do something once everything finished 
    echo "The background process ended!!" 
+1

ありがとうございました。私はできるだけ早くそれをチェックします。それは仕事をするようだ。 –

+1

確かな弟。後であなたのために使用されていた場合は、それを正しいものとして強調してください。 (いいぞ) –

関連する問題