问题描述
|
例如,
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
的调用将阻塞直到过程终止。