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