Вызов сценария ksh из system (), вызывающий segfault - PullRequest
1 голос
/ 20 февраля 2012

У меня есть довольно хорошо протестированное приложение, которое я пытаюсь заставить работать в Ubuntu Linux, и у меня много проблем, по-видимому, с реализацией ksh.Кажется, проблема проявляется, когда она вызывается командой сборки системы.

Существует сценарий ksh, который автоматически генерирует заголовочный файл C из исходного файла C.Когда я пытаюсь запустить его с помощью вызова system() в приложении C, ksh вылетает с ошибкой.

В командной строке я могу запустить команду без проблем, и она работает правильно.Он также работает в тех же условиях на всех других платформах, которые я использовал (включая SLES и Fedora Linux).Я также могу заставить его работать, изменив строку shebang в скрипте на #! /bin/bash (большая часть работы на самом деле выполняется в сценарии sed, поэтому в сценарии оболочки не выполняются никакие экзотические команды).

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

I 'Я не очень уверен, где это можно посмотреть - кто-нибудь видел что-нибудь подобное?

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

Для информации, я наконец-то определился с особенностями, вызывающими проблему. Самый простой способ - просто открыть 100 указателей на один и тот же файл, а затем вызвать system(), например,

.
for( i = 0; i < 100; i++ )
  fopen( "file", "r" );
system( "script" );

Пока сценарий shebang является оболочкой AT & T ksh, он надежно падает на этом одном боксе. Я обнаружил, что часть сборки системы оставляет много зависающих файловых указателей на один файл. Не достаточно, чтобы решить проблемы, но достаточно для этой странности.

0 голосов
/ 06 марта 2012

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

...