c/c++语言开发共享POSIX系统(3)会立即调用异步shell命令吗?

例如, system("sh /mydir/some-script.sh &")

     system("sh /mydir/some-script.sh &") 

    执行

     /bin/sh -c 'sh /mydir/some-script.sh &' 

    一旦shell返回,系统将立即返回,这将在它启动内壳后立即返回。 shell都不会等待some-script.sh完成。

     $ cat some-script.sh sleep 1 echo foo $ /bin/sh -c 'sh some-script.sh &' ; echo bar ; sleep 2 bar foo 

    是的,shell将分叉脚本并立即返回,但是您没有简单的方法来了解脚本是如何以及是否已经结束。

    运行这种异步命令的“正确”方法是fork(2)你的进程,在二进制设置为/bin/sh的子进程中调用execve(2) ,并将一个参数设置为脚本名称,并使用带有WNOHANG选项的waitpid(2)系统调用定期从父级轮询子级。 当waitpid返回-1时,您知道脚本已经结束,您可以获取其返回代码。

    实际上, system(3)所做的几乎是相同的,唯一的例外是对waitpid的调用阻塞直到进程终止。

      以上就是c/c++开发分享POSIX系统(3)会立即调用异步shell命令吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522174.html

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐