используйте trap 'kill 0' EXIT
в основном скрипте. это убьет всех детей при выходе из скрипта. независимо от того, как сценарий завершается. кроме kill -9
. подробнее об этом позже.
для демонстрации я создал два файла
$ cat killchildren
#! /bin/sh
trap 'echo killing all children; kill 0' EXIT # this is the important line
./sleepx 4 &
./sleepx 2
echo killchildren done
$ cat sleepx
#! /bin/sh
trap 'echo sleep$1 killed' EXIT # just print that it was killed
sleep $1
trap - EXIT # clear trap so not print that it was killed
echo sleep$1 done
здесь просто бегут и остаются в покое
$./killchildren
sleep2 done
killchildren done
killing all children
sleep4 killed
здесь он убит обычнымkill
(примечание, что я увеличил время сна, потому что я не быстро печатаю)
$./killchildren &
[1] 13248
$ kill 13248
killing all children
sleep8 killed
sleep10 killed
[1]+ Terminated ./killchildren
здесь убитkill -9
$./killchildren &
[1] 13259
$ kill -9 13259
[1]+ Killed ./killchildren
$ #... time passes...
sleep8 done
sleep10 done
обратите внимание, что из основного сценария не было сообщения о выходе, и дети не были уничтожены.
особо не проверял. работает по крайней мере с sh в Arch Linux по состоянию на 2018 год.
это не будет работать, если основной скрипт kill -9
. потому что семантика kill -9
заключается в немедленном завершении, не позволяя процессу что-либо делать. даже не обработка ловушки.
в котором говорилось, что все, что убивает ваш процесс, не должно делать это с помощью kill -9
. я бы посчитал это багом. здесь больше информации о том, почему бы и нетkill -9
:
Я понимаю, что это довольно устаревший вопрос, но недавно я столкнулся с той же проблемой, и это было высоко в результатах поиска. Поскольку мне удалось найти ответ, я решил опубликовать его для всех, кто сталкивается с этой проблемой.
lua_load =...
должен находиться в вашей conky.config
таблице (, а не на верхнем уровне файла, как это было в старом синтаксисе конфигурации ). Примерно так:
conky.config = {
lua_load = 'path_to_script.lua',
...
};
Странно, что даже при включенной отладке через -DD
conky не жалуется на неуместную строку.