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
的调用将阻塞直到过程终止。