Модуль подпроцесса не имеет возможности тайм-аута, поэтому основной процесс может работать вечно. Я хочу представить, что если дочерний процесс не завершится через 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