コマンドが' X時間で終了しない場合はbashしますか?

次のようなものを実行しようとしています:

sudo dhclient $wifi || otherFunction 

問題はdhclientが失敗すると、エラーがスローされるのではなく、ハングするだけです。

上記を書き直すと、dhclientは次のようになります。 dhclientが60秒以内に終了しない場合、強制終了され、otherFunctionが呼び出されますか?

回答

タグですべてがわかります:

sudo timeout 60 dhclient $wifi || otherFunction 

例:

sudo timeout 3 sleep 5 || echo finished early 

これは、タイムアウトユーティリティを使用します Linux上のGNUcoreutilsパッケージによって提供されます。

コメント

  • 残念ながら、MacOSでは動作しません'
  • timeout MacOSの場合: stackoverflow.com/a/21118126/451480
  • timeoutの殺害を具体的に確認したい場合eコマンド(他の理由でコマンドが失敗するのではなく)、終了ステータス124を確認します。

回答

timeout を使用します。

timeout 2 sleep 1 echo $? 0 timeout 1 sleep 2 echo $? 124 

コメント

  • 残念ながら、MacOSでは'機能しません

回答

gtimeoutとしてポート brew

brew install coreutils gtimeout --help 

これはPATH/usr/local/binで機能します。元の名前でtimeoutを使用する場合は、PATH/usr/local/opt/coreutils/libexec/gnubinを追加します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です