如何解决POSIX system3调用异步shell命令会立即返回吗?
| 例如,system(\"sh /mydir/some-script.sh &\")
解决方法
system(\"sh /mydir/some-script.sh &\")
执行
/bin/sh -c \'sh /mydir/some-script.sh &\'
outer3ѭ将在外壳返回后立即返回,这将在外壳发射后立即返回。两个壳都不会等待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)
,在子级中调用ѭ7,将二进制设置为/bin/sh
,并将其中一个参数设置为脚本名称,然后定期从家长使用带有“ 10”选项的“ 9”系统调用。当waitpid
返回-1时,您知道脚本已结束,您可以获取其返回代码。
实际上,system(3)
的功能几乎相同,唯一的例外是对waitpid
的调用将阻塞直到过程终止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。