You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:40:28