clipit
スクリプト内で使用して実行しようとしています。 Polybarを再起動し、必要なすべてのプログラムを起動したいが(i3を再ロードしてもまだ実行されていない場合)、端末に手動で入力しないと起動が拒否されます。i3wm
polybar
clipit
#!/usr/bin/env bash
# Terminate already running bar instances
killall -q polybar
echo 'Launching polybar...'
MONITOR=HDMI1 polybar default &
sleep 2
# Start applets if they're not running
for arg in "dunst" "clipit" "wpa_gui -qt"
do
if ! ps ax | grep -v grep | grep -io "$arg"
then
echo "Launching $arg"
exec $arg &
fi
done
echo 'Polybar launched'
exit 0
私は単に別のファイルを入れてみましたが、exec clipit
役に立ちませんでした。実行時にエラーはありません。以前使ったことがありましたxfce4-clipman
が、うまくいきました。切り替えた唯一の理由は、clipman
終了するたびにi3が自分の記録を切り取ったからです。
どんな提案がありますか?
ベストアンサー1
コードでは、最初のコマンドはkillall -q polybar
Polybarを終了してから2秒間スリープモードに切り替えます。
killall
これは非常に強力であり、パフォーマンスを予測することはできません。つまり、プロセスとその子孫を完全に終了するのにかかる時間を予測することはできません。
~によると男性:
killall
プロセスを終了するようにシグナルを名前でプロセスに送信し、プロセスを名前で終了する方法を提供するツールです。
各信号には、信号が転送されるとプロセスがどのように機能するかを決定する現在の構成があります。
したがって、パフォーマンスを制御する必要がありますkillall
。
コードを少し変更すると役に立つと思います。たとえば、コードは終了プロセスが完全に完了するまで待つ必要があります。後で線形性を追加できます killall -q polybar
。これにより、コードはプロセスが閉じるのを待ちます。
#!/usr/bin/env bash
# Terminate already running bar instances
killall -q polybar
# Wait until polybar have been completely shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 2; done
echo 'Launching polybar...'
MONITOR=HDMI1 polybar default &
# Start applets if they're not running
for arg in "dunst" "clipit" "wpa_gui -qt"
do
if ! ps ax | grep -v grep | grep -io "$arg"
then
echo "Launching $arg"
exec $arg &
fi
done
echo 'Polybar launched'
exit 0