스크립트 파일을 작성하고 XFCE 전역 단축키를 사용하여 호출하려고 합니다. Audacity 애플리케이션이 중지되면 스크립트는 애플리케이션을 계속해야 하며, 실행 중인 경우 스크립트는 애플리케이션을 중지해야 합니다(녹화 일시 중지). 이는 VLC의 재생/일시 중지에 대해 동일한 키보드 단축키를 정의할 때 유용합니다. 이렇게 하면 재생/일시 중지(VLC)와 녹음/일시 중지(Audacity)에 동일한 키보드 단축키를 사용할 수 있습니다. 에게서 아이디어를 얻으세요이 게시물나는 다음 스크립트를 작성하여 XFCE의 사용자 정의 키보드 설정에 추가했습니다. 그러나 이것은 작동하지 않습니다.
#!/bin/bash
if pgrep -f "audacity" ;
then
pkill -stop audacity && notify-send "Recording stopped"
else
pkill -cont audacity
답변1
프로세스에 STOP 또는 CONT 신호를 보낼지 여부를 알려면 먼저 현재 상태를 알아야 합니다.
- 중지되면 CONT를 보내야 합니다.
- 멈추지 않으면 STOP을 보내야 합니다.
실행 중인 프로세스의 상태는 를 통해 확인할 수 있습니다 ps
. 프로세스가 중지되면 해당 상태(보고자)에 ps -ostate=
해당 문자가 포함됩니다 T
(등호는 ps
헤더 출력을 중지합니다).
#!/bin/bash
command="audacity"
pids="$( pgrep "$command" )"
if [[ -z "$pids" ]]; then
printf '"%s" is not running\n' "$command" >&2
exit 1
fi
for pid in $pids; do
state="$( ps -ostate= -p "$pid" )"
stopped=0
case "$state" in
*T*) stopped=1 ;;
esac
if (( stopped )); then
kill -s CONT "$pid"
printf '"%s" (%d) has been unpaused\n' "$command" "$pid"
else
kill -s STOP "$pid"
printf '"%s" (%d) has been paused\n' "$command" "$pid"
fi
done
스크립트에는 이론적 경쟁 조건이 있으므로 호출 pgrep
사이에 명령이 종료 될 수 있습니다 kill
. 이럴 경우 kill
“그런 절차가 없다”는 불만이 나온다.