使用execlp调用time无输出,添加ls参数后正常的问题咨询
问题描述
当使用C语言的execlp函数调用time命令时,若不带任何参数,程序无任何输出:
int main(int argc, char* argv[]){ execlp("time", "time", NULL); return 0; }
但为time添加ls参数后,程序可正常运行并输出结果:
int main(int argc, char* argv[]){ execlp("time", "time", "ls", NULL); return 0; }
输出示例:
LICENCIA main.c msh parser.y prueba.c scanner.o y.tab.h Makefile main.o parser.o prueba scanner.l tempCodeRunnerFile.c 0,00 real 0,00 user 0,00 sys
原因分析
核心原因是time存在两种不同实现,而execlp调用的是外部可执行版本的time(通常路径为/usr/bin/time),而非Shell内置的time命令:
- 外部版本的
time设计目的是为指定命令计时,必须接收一个待执行的命令作为参数。如果没有传入参数,它没有可计时的目标程序,因此不会产生任何输出。 - 当传入
ls作为参数时,外部time会启动ls进程,待ls执行完成后输出其运行耗时统计,这就是你看到的正常输出。
而平时在Shell中直接输入time不带参数时,调用的是Shell内置的time命令,它的行为和外部版本不同(比如会等待输入后续命令并计时),这也是容易产生认知差异的原因。
内容的提问来源于stack exchange,提问作者miguelrr_11
相关产品推荐
相关产品推荐

