2011-08-26 133 views
2

我现在的剧本是这样的:等待酒完成运行

cd ~/.wine/drive_c/ 
echo "test123" > foo$$.txt 
wine start "C:\foo$$.txt" 
wineserver -w 
echo "Wine is done!" 

当只有一个节目是葡萄酒在同一时间运行的正常工作。但是如果我第二次运行这个程序,在第一个程序完成之前,这两个脚本都会等待其他程序退出。

这不起作用:

cd ~/.wine/drive_c/ 
echo "test123" > foo$$.txt 
$(wine start "C:\foo$$.txt") & 
wait ${!} 
echo "Wine is done!" 

为你关闭文本编辑器前,将退出。

我需要使用start命令,因为我希望使用其默认编辑器/查看器运行文件。

回答

2

wineserver--wait标志,它可以用来这样做。

但是,如果你一次运行多个程序,它将等待所有的程序完成。

0

会发生什么事是wine只是要求wineserver启动程序并退出了,我没有发现任何好的机制,从wineserver获得有关它产生的过程通知。

我的建议是使用How to wait for exit of non-children processes中的一种方法等待wineserver开始的进程的完成,但您需要知道它的PID。可能的想法:运行wineserver -f -d | grep init_thread(并从那里获得PID,但我看不出有哪一种方法可以找出哪些是避免竞争条件并忽略噪声;或者尝试在ps的输出中找到你的过程,但它很丑,并且绝对不健壮。

如果没有更好的曲面,您可能想要向Wine开发人员添加这样的功能(可能作为wine的标志)。

0

要等待葡萄酒退出的过程,可以将其输出管道输送到另一个程序。 在我的系统,下面的达到预期的效果:

wine "program.exe" | cat 
echo "program.exe has finished" 

如果要异步等待:

wine "program.exe" | cat & pid=$! 
# ... 
wait $pid 
echo "program.exe has finished"