Можно использовать valgrind
для этого:
$ valgrind myprogram arg1 arg2
Его вывод будет иметь много несоответствующего материала, но его сводка "кучи" делает то, что Вы хотите:
==91383== HEAP SUMMARY:
==91383== in use at exit: 157,643 bytes in 364 blocks
==91383== total heap usage: 2,999 allocs, 2,635 frees, 306,450 bytes allocated
Я протестировал перенос этого скрипта из /etc/rc0.d
в /etc/rcS.d
, /etc/rc1.d
, /etc/rc2.d
и /etc/rc3.d
со следующими результатами:
/ etc /rc0.d
- / etc / DR_Network_Configured создается, но перезагрузки не происходит. Подводя итог, когда система загружается по умолчанию ( milestone / multi-user-server: default
, аналогично уровню выполнения 3), она выполняет сценарии запуска, расположенные в / etc /rc0.d
, /etc/rcS.d
, /etc/rc2.d
и /etc/rc3.d
, но не /etc/rc1.d
.
Команды перезагрузки и инициализации не работают при запуске из сценария запуска в /etc/rc0.d
, /etc/rcS.d
(и, возможно, / etc / rc1.d
, хотя я не могу подтвердить это, поскольку сценарий запуска в этом каталоге никогда не запускался). Они работают при запуске из сценариев запуска в /etc/rc2.d
и /etc/rc3.d
.
Я полагаю, что это сделано для предотвращения постоянной перезагрузки системы. Если из-за ошибочного сценария запуска в /etc/rc2.d
или /etc/rc3.d
система войдет в бесконечный цикл перезагрузки, то ее можно будет довольно легко перезагрузить. однопользовательский этап и вызывающий нарушение сценарий запуска отключены, вместо того, чтобы искать альтернативный загрузочный носитель для загрузки, смонтировать корневой том / диск и отключить вызывающий нарушение сценарий.
На основании вышеизложенного я изменил свой сценарий реконфигурации сети следующим образом:
/etc/rc0.d
, чтобы изменить настройки сети. /etc/rc2.d/S99reboot
, который перезагружал систему. / etc / DR_Network_Configured
и существует /etc/rc2.d/S99reboot
, удалите последний, чтобы избежать постоянной перезагрузки системы. Мой соответствующий код:
#!/sbin/sh
reboot_script="/etc/rc2.d/S99reboot"
Create_Reboot_File ()
{
echo "#!/sbin/sh" > $reboot_script
echo "case \"\$1\" in" >> $reboot_script
echo "start)" >> $reboot_script
echo " init 6" >> $reboot_script
echo " exit 0" >> $reboot_script
echo " ;;" >> $reboot_script
echo "esac" >> $reboot_script
echo "exit 0" >> $reboot_script
chmod 740 $reboot_script
chown root:root $reboot_file
}
case "$1" in
start)
if [ -f /etc/DR_Network_Configured ]; then
[ -f $reboot_script ] && rm $reboot_script
exit 0
else
# My reconfigure network functions are here
# ...
touch /etc/DR_Network_Configured
Create_Reboot_File
fi
exit 0
;;
*)
echo "Usage: $0 { start }"
exit 1
;;
esac
exit 0