POSIX系统(3)会立即调用异步shell命令吗?

时间:2011-04-14 17:11:14

标签: c linux posix-api

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

执行

/bin/sh -c 'sh /mydir/some-script.sh &'
只要外壳返回,

system就会返回,这将在它启动内壳后立即返回。 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