Я пытаюсь получить вывод команды nvidia-smi из c, используя popen как здесь
C: запустить системную команду и получить вывод?
Команда хранится в строке буфера, и эта же строка используется для хранения вывода:
const size_t pid = getpid();
char pid_s[1000];
sprintf(pid_s, "%lu", pid);
FILE *file_command = NULL;
char buffer[1000];
sprintf(buffer, "nvidia-smi | grep %s |awk '{print $6}'", pid_s);
file_command = popen(buffer, "r");
if (file_command == NULL) //No error : file_command is not NULL
{
throw std::runtime_error("Command failed to execute");
}
sleep(4); //To get time for the command to be executed.
while (fgets(buffer, sizeof(buffer), file_command) != NULL) //Read output
{
printf("Result from command %s \n", buffer); //Nothing printed
}
...
Я пытаюсь получить 6-й аргумент вывода nvidia-smi которая является памятью запущенной в данный момент программы (ее pid взят из getpid ()).
Ничего не выводится на экран.
fgets возвращает NULL, хотя память была выделена на GPU (с cudaMallo c).
И я позаботился об использовании сна, как рекомендовано в этом посте
fgets возвращает ошибку FILE, возвращаемую popen