Mono:如何以阻塞方式执行shell脚本?

时间:2015-10-31 21:35:51

标签: linux bash mono

我正在尝试从Mono调用bash脚本。因为脚本反过来调用“pico2wave”(Android的Pico TTS语音的Linux实现),所以对脚本的调用必须阻止执行Mono代码。

我当然可以修改脚本来触摸/ rm作为锁的文件,但是有没有办法在Mono代码中完成这个任务?

感谢您的任何建议,

的Carsten

1 个答案:

答案 0 :(得分:0)

您可以使用Process.WaitForExit等待(阻止)脚本执行完毕。

Process.WaitForExit Method

  

设置等待关联进程退出的时间段,   并阻止当前执行的线程,直到时间结束   或者这个过程已经退出。要避免阻止当前线程,请使用   已退出的活动。

休眠5秒然后退出的示例shell脚本,名为shell-block.sh

#!/bin/bash
sleep 5
exit 0

示例C#:

using System;
using System.Diagnostics;

namespace consoleblocking
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine ("Non-blocking");
            Process.Start ("./shell-block.sh");

            Console.WriteLine ("Blocking");
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = "./shell-block.sh";
            startInfo.Arguments = "";
            using (var myProcess = Process.Start(startInfo))
            {
                myProcess.WaitForExit();
            }
        }
    }
}