스크립트로 시작된 모든 프로세스를 종료하는 방법

스크립트로 시작된 모든 프로세스를 종료하는 방법

.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?

관련 정보