Построить цикл во время цикла вокруг команды, бросая ошибку сегментации

Если вы хотите синхронизировать файлы между несколькими машины, то вы можете просто использовать централизованную систему контроля версий, такую ​​как Subversion (или FSVS, которая использует SVN в качестве бэкэнда). Приятно то, что все в вашем / home (что вы добавляете в систему управления версиями) затем версируется и может быть легко синхронизировано с другими машинами или откатано.

0
05.12.2018, 19:08
2 ответа

Когда программа аварийно прерывается, код выхода (, видимый оболочкой ), обычно имеет установленный старший бит, поэтому значение равно 128 или выше. Таким образом, простым решением может быть

dodgy_command

while [ $? -ge 128 ]
do
  process_data
  dodgy_command
done

Если вам нужна только segfault, а не любая другая ошибка, строка while становится $? -eq 139(, потому что SEGV — это сигнал 11; 128+11=139 ).

Если вы не получаете код выхода с высоким значением при сбое, это, вероятно, означает, что приложение само перехватывает ошибку и принудительно использует другой код выхода.

5
28.01.2020, 02:16

Вы не упомянули, на каком языке вам нужно это сделать. Итак, я предполагаю сценарий оболочки.

Вы правы, вы хотите использовать ловушку. Ловушка в 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

Упрощенно, но содержит основы того, о чем вы просите.

0
28.01.2020, 02:16

Теги

Похожие вопросы