Для этого уже давно существовала функция, но она отсутствовала в руководстве до 2018 года. :Нажмите клавишу c
, чтобы выбрать выделенный в данный момент процесс, а также все его дочерние процессы. Затем операции, применяемые к выбранным процессам (, такие как уничтожение с помощью клавиши k
), применяются к процессу и его потомкам.
Но это не атомарно. Если между моментом, когда вы нажмете c
, и моментом, когда ядро уничтожит все процессы, будут созданы новые дочерние процессы, они не будут уничтожены и, скорее всего, в конечном итоге будут повторно присоединены к процессу инициализации. Это связано с тем, что htop зацикливается на выбранных процессах и убивает их один за другим.
Некоторое время назад я предложил патч для добавления функции уничтожения атомарной группы -в htop, но реализация не была достаточно согласованной, чтобы ее можно было объединить. С его помощью можно атомарно убить целую группу процессов из htop. Это не совсем то же самое, что убить целое дерево, но, насколько мне известно, ядро не предоставляет никакого способа уничтожить произвольное дерево атомарно.
Если файлы назначения были перемещены, то с точки зрения rsync
они больше не существуют. Флаг --ignore-existing
бесполезен, потому что файлы не существуют там, где они должны быть, поэтому игнорировать их нечего.
Вы можете создать файл флага и отправлять туда только те файлы, которые были изменены с момента rsync
последнего успешного запуска. Что-то вроде этого скелета может работать (это сложнее, чем вы могли ожидать, потому что источник файлов находится в вашей удаленной системе, а не в локальной):
path='/share/CACHEDEV1_DATA/Lanein1/Unicard'
flag="$path.flag"
# Must have a flag file. If we don't then create one from the epoch
if ssh -nq admin@71.122.227.193 "[ ! -f '$flag' ]"
then
touch -t 197001010000 /tmp/1970
scp -p /tmp/1970.flag admin@71.122.227.193:"$flag"
rm -f /tmp/1970.flag
fi
# Flag the start of the synchronisation
ssh -nq admin@71.122.227.193 "date >'$flag.tmp'"
# Copy files newer than the flag
if ssh -nq admin@71.122.227.193 "find '$path/' -depth -newer '$flag' -print0 |
rsync -avz --files-from - --from0 admin@71.122.227.193:/ /home/toor/UCDownloads/
then
# Install the new flag
ssh -nq admin@71.122.227.193 "mv -f '$flag.tmp' '$flag'"
fi
Для тех, кто не знаком с QNAP, команда touch
не является стандартной, а функциональность rsync
урезана. Я использовал touch
на локальном клиенте для создания файла, датированного 1970 -01 -01, а затем передал его в удаленную систему в качестве начального флага. (Если бы touch
существовал в удаленной системе, было бы намного проще создать файл удаленно. )В find
входят только файлы и каталоги, созданные/измененные с момента установки флажка.