Почему нативная программа работает нормально при непосредственном выполнении, но не работает с ошибкой сегмента при отправке через condor? - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть сторонняя библиотека, которую я пытаюсь включить в симуляцию. У нас есть статическая библиотека (.a), а также все ее зависимости во время выполнения (общие объекты). Я создал очень простое приложение (на C), которое связано с библиотекой. Все, что он делает - это вызывает функцию инициализации, которая является частью API сторонней библиотеки и завершается. Когда я запускаю это прямо из командной строки, он работает нормально. Если я отправлю исполняемый файл в нашу сетку Condor, он завершится с ошибкой seg на strncpy (libc.so.6). Я заставил condor запускать исполняемый файл только на определенной машине, и если я запускаю его непосредственно на этой машине, он работает нормально.

Я в основном программист на Java ... ограниченный опыт программирования. Я знаком с такими инструментами, как nm, ldd, catchsegv и т. Д. До такой степени, что могу их запускать. Я действительно не знаю, где начать искать проблему все же.

Я запустил ldd непосредственно на исполняющей машине и через скрипт, переданный через condor, вместе с моим исполняемым файлом. ldd сообщает об одних и тех же файлах в обоих случаях.

Я не понимаю, как будет работать его напрямую, но он не сможет быть запущен кондором. Процесс, который в конечном итоге выполняет программу condor_startd, - это процесс, который запускается от имени пользователя root и меняет свой эффективный идентификатор на отправителя. Возможно, это как-то связано с этим?

1 Ответ

0 голосов
/ 20 апреля 2011

Не знаю, почему это может вызвать проблемы, но виновником была переменная среды LANG. Он не был установлен при работе под Condor, но был установлен на US_EN.UTF-8 при локальной работе. Добавление этого значения в среду выполнения кондора устранило проблему.

...