Как я могу ввести тайм-аут с помощью команды popen? - PullRequest
0 голосов
/ 05 июля 2019

Модуль подпроцесса не имеет возможности тайм-аута, поэтому основной процесс может работать вечно. Я хочу представить, что если дочерний процесс не завершится через X секунд, то возврат основного времени произошел с ошибкой Time Out.

В приведенном ниже коде я запускаю my_script с аргументом my_arg из другой программы. Теперь, если во время выполнения my_script time_out происходит, то есть если есть какой-то бесконечный цикл или что-то еще, родительский процесс будет выполняться вечно.

int my_func(){
       char ch;
       FILE *fpipe;
       FILE *copy_fp;
       FILE *tmp;
       char *command=(char *)"/usr/bin/my_script my_arg";
       copy_fp=fopen("/tmp/output_file_path","w");
       fpipe=(FILE *)popen(command,"r");
       if(fpipe){
          while( ( ch = fgetc(fpipe) ) != EOF ){
               fputc(ch, copy_fp);}
           }
        else{
           if(copy_fp){
             fprintf(copy_fp,"Sorry there was an error opening the file");
          }
        }
       pclose(fpipe);
       fclose(copy_fp);
       return 0;   
    }

Так, как я могу ввести Тайм-аут в этом. Могу ли я использовать команду select в unistd.h для запуска другого скрипта, так как select имеет функциональность timeout. Или я могу использовать timeout только с popen

...