
Итак, в ~/.xinit есть следующие строки:
Код: Выделить всё
WMS_DEATH_LIST=""
function wms_start_service()
{
local SERVICE=$1
echo "Starting $SERVICE..." >&2
$SERVICE &
PID=$!
echo "Starting $SERVICE... done" >&2
WMS_DEATH_NOTE="$(echo $WMS_DEATH_LIST)$(echo)$PID"
}
function wms_stop_service()
{
kill -s SIGQUIT $1
wait $1
}
function wms_killall_services()
{
local I
for I in $WMS_DEATH_LIST
do
wms_stop_service $I
done
}
WM_PID=$(wms_start_service $WM)
WM_PANEL_PID=$(wms_start_service $PANEL)
WM_KLIPPER_PID=$(wms_start_service klipper)
wait $WM_PID
wms_killall_services
WM и WM_PANEL --- это приложения менеджера окон и панели соответственно.
Казалось бы все просто... wms_start_service должна запускать процесс параллельно с исполняющей оболочкой и продолжать выполнение. именно так и происходит, если просто открыть терминал с bash ввести (методом копипаста) туда эти функции, а потом пользоваться ими как показано.
Но при использовании startx все несколько странно... На экране появляется:
Код: Выделить всё
Starting awesome...
Starting awesome... done
После этого он работает. После выхода из него так же запускается панель. И снова ждет, пока ее не прибьют. Потом запускается клиппер. И тоже ждет пока его не убьют.
Объясните мне бестолковому, что я делаю не так? Наверняка тут какая-то дурость есть, но я ее не вижу о_О.
Upd.: Могу даже уточнить формулировку. Какого черта оболочка не покидает функцию wms_start_service до тех пор, пока запущенное в ней приложение не будет завершено? При том только при вызове из startx. Во всех остальных случаях все работает. Более того, если в том же скрипте просто запускать процессы (без использования функций), то все выполняется как надо. Так же этот скрипт работает, если заменить wm и панель на какие-нибудь приложения и просто запустить. Я уже ничего не понимаю.