Программа зависает при вызове скриптом! - PullRequest
0 голосов
/ 05 июля 2011

Я искал везде перед публикацией, но не смог найти ответ ..

Мне нужно вычислить некоторую статистику (Avg, St. Dev. И т. Д.) Для времени выполнения алгоритма, поэтому у меня есть эта программа на c ++ (bb.exe), которая запускает алгоритм и выводит время комп. .

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

Поскольку выполнение не очень быстрое, я написал программу на c (CalculateStat), которая использует вызов system ()

system("bb.exe > output.txt");

для многократного выполнения предыдущего алгоритма, а затем вычисляет необходимую статистику, поэтому я могу просто запустить "./CalculateStat" и вернуться через несколько часов, чтобы увидеть результаты.

CalculateStat выводит (в стандартном выводе) каждую строку, напечатанную bb.exe.

Проблема в том, что когда CalculateStat запускает bb.exe, случается, что bb.exe зависает без причины (зависает примерно 2 раза каждые 6 вычислений), поэтому я должен убить его (ctrl + c), чтобы запустить CalculateStat .

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

У кого-нибудь есть предложение?

EDIT-- Я подумал, что проблема может быть в одновременном доступе к выходному файлу, поэтому я удалил из «CalculateStat» часть, читающую файл, оставив только последовательные вызовы. Но он все равно зависает

РЕДАКТИРОВАТЬ 2-- Ничего себе ... Это просто стало слишком странно, поэтому я просто продолжал пытаться вызвать оригинальный bb.exe из терминала, и он тоже там завис по статистике замерзло началось ..)

В любом случае, сейчас нет смысла в этом вопросе. Извините всех: (

Ответы [ 4 ]

0 голосов
/ 14 июля 2011

Проблема на самом деле была в «Блэкбоксе». Он зависал, когда применялись странные параметры, и я решил это, используя некоторые проверки в основной программе. Спасибо всем!

0 голосов
/ 05 июля 2011

Вы сможете увидеть, что делает процесс с помощью команды ps.Я предполагаю, что это блокировка дескриптора файла «стандартная ошибка», который вы не перенаправили.(используйте &> вместо> для перенаправления как stdout, так и stderr в файл.)

0 голосов
/ 05 июля 2011

Откуда ты знаешь, что он заморожен?Ничего не добавляется в файл?Это может быть просто буферизацией.Большинство программ буферизуют свой вывод, если они не пишут в терминал.

0 голосов
/ 05 июля 2011

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

...