Unix 命令:exec echo";这是测试用的&燃气轮机;试验;壳牌如何安排输出重新定向?
我试图理解,对于上面的命令,当与shell本身相关联的进程被echo进程替换时,shell如何安排输出重定向?非常感谢您的帮助 问候Unix 命令:exec echo";这是测试用的&燃气轮机;试验;壳牌如何安排输出重新定向?,unix,exec,Unix,Exec,我试图理解,对于上面的命令,当与shell本身相关联的进程被echo进程替换时,shell如何安排输出重定向?非常感谢您的帮助 问候 Rupam外部命令的输出重定向是通过操纵文件描述符来实现的,通常涉及dup2,这是一种系统调用,用于将文件描述符分配给现有打开的文件。在这种情况下,执行echo的进程的标准输出被指示指向目标输出文件 shell执行以下步骤的近似等效操作: 通过调用创建当前流程的副本;后续步骤发生在子流程中。(当使用exec调用命令时,此步骤将被省略,如您的示例所示。) 打开tes
Rupam外部命令的输出重定向是通过操纵文件描述符来实现的,通常涉及
dup2
,这是一种系统调用,用于将文件描述符分配给现有打开的文件。在这种情况下,执行echo
的进程的标准输出被指示指向目标输出文件
shell执行以下步骤的近似等效操作:
exec
调用命令时,此步骤将被省略,如您的示例所示。)test
进行写入,并记住文件描述符echo
echo
命令只是写入标准输出,这是文件描述符1的一个奇特名称。它不在乎最后是否会写入TTY、文件或其他程序。以上步骤确保文件描述符1确实指向打开的文件test
,感谢您的回复。实际上,在我的系统中,echo是/bin中的一个独立程序。因此,当我使用:exec/bin/echo“this is for test new”>test显式调用该程序时,它将强制shell进程替换为/bin/echo进程。但是输出重定向工作正常。谢谢您的评论。我理解输出重定向部分,但对fork()部分感到困惑(我对Unix比较陌生)。我们调用exec不是为了避免额外进程的分叉吗?那么,从哪里创建子对象呢?此外,会话在执行echo后存在——正如预期的那样,没有要返回的shell进程——但是如果存在子进程,那么从echo退出(或执行它的子shell)应该返回到父shell(我从那里开始会话)。事实并非如此。@RupamBhattacharjee步骤1(fork)对于您给出的命令被省略,该命令以exec
开头。这在步骤1末尾的括号中说明。感谢您的澄清。很抱歉一开始就错过了。问候鲁帕