【发布时间】:2016-05-25 22:08:08
【问题描述】:
我正在为一项任务开发一个简单的 shell。我读取了用户输入的一条命令,将其标记为fork(),然后在子进程中使用execvp()在后台执行该命令。
问题是我需要实现一个记录有效命令的历史功能。我知道检查用户输入的字符串是否是有效命令的唯一方法是检查execvp() 是否返回-1。这是检查无效命令的好方法,但是由于对execvp() 的调用发生在子进程中,并且我用于历史记录的数据结构被复制到fork() 上的子进程而不是共享,所以我可以' t 使用子级中execvp() 的结果更新历史记录(因为历史记录结构是副本,所以我所做的任何更改都不会反映在父级结构的副本中)。
有什么方法可以检查execvp() 会在没有实际调用它的情况下返回 -1(即在分叉之前或之后)?如果我能找到一种方法,我将能够在父进程中验证 execvp() 是否会成功并使用该信息正确更新我的历史数据结构。
【问题讨论】:
标签: c linux shell concurrency fork