我正在编写一个小 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/