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
)
РЕДАКТИРОВАТЬ
После еще одного исследования я нашел возможную причину, см.