b = ListArray.new a.arr
Вы фактически передаете ссылку a.arr
в b, а не в ее значение.
Вы можете сделать это следующим образом:
b = ListArray.new a.arr.dup
Отметить этот вопрос , который касается передачи аргумента ссылки или значения.
Другое get-you-started решение: Во время завершения работы система запускает скрипты в/etc/init.d/(или действительно, сценарий в/etc/rc.*/, но Вы получаете идею.) Вы могли создать сценарий в том каталоге, который проверяет состояние Вашего резервного копирования, и задержки закрываются, пока резервное копирование не завершается. Или еще лучше, это корректно прерывает Ваше резервное копирование.
Суперпользователь мог обходное решение этот сценарий (с/sbin/halt, например), но Вы не можете предотвратить суперпользователя для того, чтобы сделать что-либо, если их ум действительно установлен в выполнение его.
Если пользователи собираются быть закрывающимися через GNOME/KDE, просто запрещают им выполнение так.
http://live.gnome.org/GnomePowerManager/FAQ#head-1cf52551bcec3107d7bae8c332fd292ec2261760
Больше get-you-started, чем полное решение, Вы могли исказить команду завершения работы далеко и затем использовать сценарий как
#!/bin/sh
ps -ef|grep backupprocess|grep -v grep > /dev/null
if [ "$?" -eq 0 ]; then
echo Backup in progress: aborted shutdown
exit 0
else
echo Backup not in progress: shutting down
shutdown-alias -h now
fi
сохраненный в пути пользователя как завершение работы. Я ожидаю, что был бы некоторый иждивенец изменения о том, как Ваши пользователи вызывают завершение работы (Значки/командная строка менеджера окон) и возможно для различных дистрибутивов также.
Я не могу не чувствовать, что Вы не понимание метафора Unix, и что Вы просите, клудж.
Если пользователь, работающий как корень, нет ничего, что корень может сделать, чтобы мешать корню закрыть систему! Можно сделать вещи оформления витрины как затемнение завершения работы UI, но это ничего действительно не выполняет.
Я не могу сказать, говорите ли Вы об этом в контексте многопользовательской машины или машины, используемой в качестве "настольного ПК" с отдельным пользователем, сидящим в консоли. Если это - первый, Ваши пользователи действительно не должны получать доступ к машине с учетными данными, которые могут завершить работу системы для ежедневных операций. Если бы это - последний, я рекомендовал бы обучить пользователей к любой (a) проверять, что сценарий работает, или (b) использованию конкретный сценарий завершения работы, который Вы определяете, который проверяет на процесс сценария и отказывается завершать работу, пока это не пошло.