execvp 和 wait() 之后无法重新获得控制权

标签 c shell controls fork execvp

我正在编写一个小 shell,它必须执行我解析的命令。

f 是一个字符**,如下所示:[ls][-la] p 是一样的,使用方式如下:[wc] 所以我尝试在 wc 中通过管道 ls -la 。 我的问题是,当我执行“ls -la | wc && date”(这对于管道来说效果很好)时,我的迷你shell被关闭并且它不执行“date”。我使用 wait 函数来等待它完成,但没有执行任何操作。看起来它被卡住了,并在第二次 execvp 之后退出。

我的数组以 NULL 结尾。 ls -la | wc 执行得很好,但此后我又回到了 bash。 我尝试过使用 execlp 和 execl 但我认为考虑到我需要第一个参数的选项(ls + -la),这不是问题。 请问你能帮帮我吗 ? 预先感谢:)

最佳答案

所有形式的 exec 都不会返回;它们用指定的可执行文件替换当前运行的镜像。这里的关键词是“替换”。

执行调用 exec* 之后的语句的唯一情况是 exec 失败(例如,如果找不到可执行文件)。

关于execvp 和 wait() 之后无法重新获得控制权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17584342/

相关文章:

c - Apache C 模块如何向客户端发送响应

c - 从c中的文件中读取分号后的整数 "unfixed"个数

c - 有没有办法使用 gcc 将 C 转换为 MIPS?

linux - Linux 中的 Rm 行为

c# - 所有复选框的单个事件处理程序

c - 这段代码在做我想做的事吗?

linux - curl 不可读取的输出

xml - 解析 xml 的 shell 命令运行不正常

asp.net - 控制权限的最佳实践?

c# - 在 C# 中通过名称查找后台工作对象