내 .xinit
스크립트는 다음과 같습니다
...
exec start_awesome.sh | logger -t awesome-session
그것이 하는 일은 기본 xinit를 호출하고 내 사용자 정의 데스크탑 init 스크립트를 호출하는 것뿐입니다.
다음은 start_awesome.sh
다음과 같습니다.
...
# Run stuff in the background
xsettingsd &
urxvt256cd -f
xscreensaver &
picom -b --experimental-backends
yandex-disk start
flatpak run org.keepassxc.KeePassXC &
awesome
pkill -P $$
마지막 것의 목적 pkill
은 "이 스크립트에 의해 시작된 모든 것을 정상적으로 종료"하는 것입니다. 그렇지 않으면 이전에 분기된 모든 프로세스가 끝날 때까지 내 X 세션이 종료되지 않기 때문입니다.
문제는 작동하지 않는다는 것입니다. 내 세션과 분기된 모든 프로세스를 종료하는 유일한 방법은 kill 0
또는 을 호출하는 것입니다 pkill -u 1000
. 그러나 이렇게 하면 Xorg가 예상치 못한 신호에 대해 불평하게 됩니다. 내가 원하는 것은 start_awesome.sh
멋진 종료 후에 실행되는 모든 것을 죽이는 것입니다 .
아래와 같이 테스트 스크립트를 만들었습니다.
function child1 {
echo "Child 1"
sleep 3s
echo "Child 1 end"
exit 11
}
function parent {
echo "Parent"
sleep 1s
echo "Parent end"
}
child1 &
parent
pkill -P ${$}
이는 예상대로 작동합니다. child1과 parent를 시작하고 parent가 끝나면 종료됩니다. 내 스크립트와 어떻게 다른가요 start_awesome.sh
?