c - 限制管道程序的执行时间

标签 c time pipe fork

我想在 C 程序中执行 Linux 命令,并从程序中的该命令读取(解析)stdout。下面的代码可以工作,但除了字符串和字节读取限制之外,我不知道如何限制命令的执行时间。有什么想法吗?

FILE *ps_pipe; 
int bytes_read;
int nbytes = 100;
char *my_string=NULL;
char message[1024];
message=sprintf(message,"any command here");
ps_pipe = popen (message, "r");
my_string = (char *) malloc (nbytes + 1);
bytes_read = getdelim (&my_string, &nbytes, "delimiter_word", ps_pipe);
pclose(ps_pipe);
free(my_string);

最佳答案

您可以使用 select() 来做到这一点。 Select 可以“等待”一个或多个文件描述符事件的发生(可读、可写……),并具有可选的超时时间。由于它对文件描述符进行操作,因此您还需要 fileno(ps_pipe)。

但是请记住,您将无法轻松终止 fork 进程,因为 popen 隐藏了子进程的某些细节。如果您需要这样的控制,则需要使用较低级别的函数 fork()、pipe()、dup()、exec()、wait() 以及可能的kill()。

关于c - 限制管道程序的执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10571299/

相关文章:

c++ - C++ 中独立于操作系统的线程?

c - “program.exe has stopped running”尝试了一切,但无济于事?

c - 不包括 stdlib.h?

php - 在 php/mysql 中将日期时间数据类型转换为日期和时间数据类型

time - 如何读取时间戳?

bash - SED 查找 0.0% 的行//忽略 100.0% 的行

c - 为什么我的函数会更改输入参数的值?

c++ - 如果时刻恰好在冬季结束时(非夏令时),日期/时间转换问题

mysql - 通过 PHPMyAdmin 将 PIPE 分隔格式 txt 导入 MySQL

c# - 将 createprocessasuser 的 stdout 重定向到管道在读取时挂起