Firefoxを4秒間起動してから、それを強制終了するスクリプトがあります。 Firefoxはキャプティブポータルに自動的にログインするので、wifiが接続されるとすぐに4秒間開くだけで済みます。私はUbuntu13.04を使用しています。
私の問題は、$ pidが設定されていないことのようです。
firefox ; pid=$!
sleep 4
kill $pid
編集:セットを削除しました、そして今それはkillに無効なpidを与えます。
スクリプトは、Firefoxプロセスが終了するまで待機し、その後pid=$!
およびその他のコマンドを実行するため機能しません。
やりたいことをする簡単な方法はtimeout
です。
timeout 4s firefox
最初の引数の後に提供されたプログラムを開始し、最初の引数として指定された時間が経過した後にプログラムを停止します。
pid=$!
が失敗する理由は、$!
がバックグラウンドで実行された最後のジョブのPIDであるためです。
つまり、
$ foo & echo $!
foo
を開始し、そのプロセスのPIDをエコーします。
あなたの場合、firefox ; pid=$!
をfirefox & pid=$!
に置き換える必要がありますが、firefox
は実際のバイナリをexec
するスクリプトであるため、かなり役に立たない可能性があります。
あなたがする必要があるのは、killall
を使用することです(これはすべてインスタンスfirefox、あなたまたは他のユーザーを問わず)を殺そうとします)または(コピーして)/usr/bin/firefox
スクリプトを編集して新しいPIDをエコーします。
さらにいくつかの解決策。
firefox & sleep 12; kill $!
非常に一般的です。どこでも動作するはずです。aptget install timeout
およびtimeout -k 3m 14s firefox
(UbuntuサーバーとFreeBSDサーバーの1つをチェックしました。どちらもデフォルトでインストールされていませんでした)。expect
を使用します: https://unix.stackexchange.com/questions/43340/how-to-introduce-timeout-for-Shell-scriptingPerl -e "alarm 10; exec @ARGV" "firefox"
$COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID
( 出典と説明)