c - 在 execlp 调用期间休眠以避免输出 'lag'?是否可以?

标签 c linux shell process

目前我正忙于用 C 语言为 Linux 开发的 shell,最近有人指点我使用 execlp 从我的 shell 中执行单独的程序。我目前在 shell 中实现的示例非常简单,执行 shell,运行“date”命令,然后 execlp 启动“date”,这非常简单,将日期打印到终端。这种情况下的问题是,虽然日期程序成功执行并打印到终端,但它会在 shell 提示符后立即打印。我猜 execlp 返回日期只是太晚了,导致它在提示打印后出现。有没有办法避免“滞后”? sleep 功能似乎适合这里,但我不知道如何围绕 execlp 实现它。这里有什么想法吗?

谢谢!

最佳答案

wait() 让您的子进程在发出提示之前返回。下面的代码是对需要完成的工作的过度简化,但为您提供了一般要点:

   switch (pid = fork()) {
   case 0:   execlp("date", "date", (char *)NULL);
             exit(EXIT_FAILURE);
   case -1:  perror("fork");
             break;
   default:  while ((r = waitpid(pid, &status, 0)) == (pid_t)-1) {
                if (errno != EINTR) {
                    perror("wait");
                    break;
                }
             }
   }

关于c - 在 execlp 调用期间休眠以避免输出 'lag'?是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106801/

相关文章:

linux - Linux 的最大管道命令

c - sizeof(char) 和 sizeof(char *) 的区别

linux - Bash ASCII 实现

java - 如何使用 libhdfs.so 获取 hdfs 配置信息

linux - 如何在用户空间调用自定义的Kernel函数?

C++ Linux 多线程瓶颈。跟踪-f : `[pid 2646] mprotect(0x7ffe7c030000, 4096, PROT_READ|PROT_WRITE) = 0`

linux - :(){ :|:& };: Forkbomb?

bash - 如何用shell脚本删除空格?

c++ - 将 union 字段中的位解释为 C/C++ 中的不同数据类型

调用 malloc,未知大小