1. ホーム
  2. linux

[解決済み] Bashで指定されたタイムアウト後に子プロセスを終了させるには?

2022-04-13 01:27:33

質問

私は子プロセスを起動するbashスクリプトを持っていますが、時々、明確な理由もなくクラッシュ(実際にはハング)します(クローズドソースのため、それについて私ができることはあまりありません)。その結果、私はこのプロセスを一定時間起動し、一定時間後に正常に戻らなかった場合にそれを殺すことができるようにしたいと思います。

はあるのでしょうか? シンプル 堅牢 は、bashを使ってそれを実現する方法を教えてください。

追伸:この質問はserverfaultとsuperuserのどちらが適しているか教えてください。

解決方法は?

(見たまま BASH FAQ エントリー #68: "コマンドを実行して、N秒後に中止(タイムアウト)させるにはどうしたらいいですか? )

ダウンロードしても構わない場合は timeout ( sudo apt-get install timeout のように使用します。(ほとんどのシステムにはすでにインストールされています。) そうでない場合は sudo apt-get install coreutils )

timeout 10 ping www.goooooogle.com

もし、何かをダウンロードしたくない場合は、timeoutが内部で行っていることを行ってください。

( cmdpid=$BASHPID; (sleep 10; kill $cmdpid) & exec ping www.goooooogle.com )

bashのコードが長い場合にタイムアウトさせたい場合は、2番目のオプションをこのように使用します。

( cmdpid=$BASHPID; 
    (sleep 10; kill $cmdpid) \
   & while ! ping -w 1 www.goooooogle.com 
     do 
         echo crap; 
     done )