Если вы хотите синхронизировать файлы между несколькими машины, то вы можете просто использовать централизованную систему контроля версий, такую как Subversion (или FSVS, которая использует SVN в качестве бэкэнда). Приятно то, что все в вашем / home (что вы добавляете в систему управления версиями) затем версируется и может быть легко синхронизировано с другими машинами или откатано.
Когда программа аварийно прерывается, код выхода (, видимый оболочкой ), обычно имеет установленный старший бит, поэтому значение равно 128 или выше. Таким образом, простым решением может быть
dodgy_command
while [ $? -ge 128 ]
do
process_data
dodgy_command
done
Если вам нужна только segfault, а не любая другая ошибка, строка while становится $? -eq 139
(, потому что SEGV — это сигнал 11; 128+11=139 ).
Если вы не получаете код выхода с высоким значением при сбое, это, вероятно, означает, что приложение само перехватывает ошибку и принудительно использует другой код выхода.
Вы не упомянули, на каком языке вам нужно это сделать. Итак, я предполагаю сценарий оболочки.
Вы правы, вы хотите использовать ловушку. Ловушка в bash принимает строку для выполнения при получении сигнала. Я обычно делаю это вызовом функции, чтобы четко определить, что я хочу сделать, когда перехватываю сигнал.
Вот пример скрипта.
#!/bin/bash
# define the function that will handle the trap
sigSegFault() { echo "Inside sigSegFault"; }
# Trap the Segmentation Violation (signal 11) signal
trap sigSegFault SEGV
# Start infinite loop
while [[ true ]]; do
sleep 10
done
exit 0
Упрощенно, но содержит основы того, о чем вы просите.