C++ система не может создать дочерний

Для того, чтобы запустить некоторую команду под Linux от c++ программа, я используюsystem Команда. Весь код относительно большой, но в основном он загружает некоторые двоичные файлы, читает их, создает некоторые другие двоичные и текстовые файлы, а затем запускаетsystem команды на текстовые файлы.

Например, он извлекает двоичные данные, анализирует их и сохраняет результаты в текстовом файле. Этот текстовый файл затем обрабатывается gnuplot чтобы создать какой-то сюжет.

Чтобы запустить gnuplot Команда, которую я использую что-то вроде system("gnuplot -e script.gp"), Это прекрасно работает для большинства двоичных файлов, которые я должен проанализировать. Но по какой-то причине у меня есть несколько проблемных файлов, потому что после загрузки system(NULL) возвращается 0 а также system("gnuplot -e script.gp")возвращается -1

man system не объясняет, почему могло произойти. Это просто говорит о том, что

  • Если команда NULL, то ненулевое значение, если оболочка доступна, или 0, если оболочка недоступна.
  • Если команда NULL, то system() возвращает состояние, указывающее, доступна ли оболочка в системе
  • Если дочерний процесс не может быть создан или его состояние не может быть получено, возвращаемое значение равно -1

Мой вопрос заключается в следующем: почему system(NULL) возвращается 0 (имеется в виду, что оболочка недоступна)?

ПРИМЕЧАНИЕ 1: бинарные файлы, которые я загружаю, тяжелые, при загрузке они используют <30% оперативной памяти, а для одного из проблемных файлов даже требуется <60%. Интересно, может ли это разрушить system

ПРИМЕЧАНИЕ 2: код запускается на моем локальном компьютере (с его локальными библиотеками) и загружает двоичные данные, доступ к которым осуществляется через sshfs на кластере. man system говорит, что с помощью программы с set-user-ID или же set-group-ID привилегии опасны. Я не понимаю, что это значит. (если я сделаю ls -l myprog, Я получил -rwxr-xr-xразрешения, но если я сделаю ls directory_containing_data_on_the_cluster, Я получилdrwxr-sr-x который как s)

РЕДАКТИРОВАТЬ

После еще одного исследования я нашел возможную причину, см.

0 ответов

Другие вопросы по тегам