rofi
1つのキーバインドでアプリケーションランチャーを切り替えたい。シェルスクリプトを作成しました
#!/bin/bash
rofi -dpi 1 -modi drun -show drun -show-icons
そしてそれをいくつかの鍵に結び付けました。これは機能しますが、トグルして実行しないように切り替えるには、次のことを試しました。
pkill -0 rofi || rofi -dpi 1 -modi drun -show drun -show-icons
それでは、rofiは最初から始められません。私はテストしましたpkill emacs || emacs
、そしてそれはemacsを切り替えます。誰かがrofi用に修正する方法を教えてもらえますか?そして、引数「-0」は何をしますか?マニュアルに見つかりませんでした。
私はこれに対して頭を殴るのにかなりの時間を費やしました、そしてそれから私はrofiがそのpidを保存していることに気づきました。configを介してpidファイルにアクセスできます。これにより、必要なすべての情報にアクセスできます。しかし、エキサイティングなことに取り掛かる前に、安全性について言及することが重要です。暴走したスクリプトを作成する場合に備えて、プロセス数を(何らかの方法で)制限することをお勧めします。経験から言えば、別のttyに切り替えてすべてを強制終了するのに十分なメモリを解放できるようになるまで、30分かかる可能性があります。
if [[ 10 -lt $(pgrep -c -f "$0") ]]; then
pkill -f rofi
pkill -f "$0"
exit 1
fi
これがまさに私が望んでいることなのか、それともそのコードが何をするのかはわかりません。
tl; dr:そのままの状態で、コードには「pkillが強制終了rofi
できるプロセスが見つからない場合は、実行するrofi
」と表示されます。すでに実行されている場合は実際に強制終了するのではなく、実行されているかどうかを大まかに確認し、実行されていない場合は開始します。本当に毎回殺したい場合は、を削除してください-0
。
-0
シグナル0でkillsします。これは、呼び出し元のプロセスにプロセスを強制終了する権限があり、プロセスが存在するかどうかを確認するだけです。それは実際には何も殺しません。
差出人man 3 kill
:
sigがゼロ(ヌル信号)の場合、エラーチェックは実行されますが、実際には信号は送信されません。null信号は、pidの有効性を確認するために使用できます。
この方法で信号を渡すことは、ここに文書化されていますman pkill
(やや不明確に-signal
、これは実際には意味します-[signal]
):
-signal --signal signal:一致した各プロセスに送信するシグナルを定義します。数値または記号の信号名のいずれかを使用できます。
プロセスを強制終了する場合は、デフォルトのシグナル()を使用pkill
せず-0
に使用するSIGTERM
か、代わりに別のシグナル名または番号を渡して使用します。
ちなみに、アプリケーションのライフサイクルを処理するこの方法は非常に基本的であり、さまざまな理由で失敗する可能性があります(たとえばkill
、同期していないためrofi
、次の方法で置き換える-0
と、次の方法が表示される前に前の方法がなくなる保証はありません。致命的な信号)。そのため、理想的には、アプリケーション自体またはサービスマネージャーにこれをより確実に処理させる方がよいでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加