次のコードを使用して「不滅の」プロセスを作成したようです。
System.Diagnostics.ProcessStartInfo test = new ProcessStartInfo("cmd", " /c " + aCommandLine); //aCommandLine is : ruby test.rb
test.CreateNoWindow = true;
test.RedirectStandardError = true;
test.RedirectStandardOutput = true;
test.UseShellExecute = false;
test.WorkingDirectory = System.IO.Path.GetDirectoryName(aRTextFilePath);
System.Diagnostics.Process aProcess = Process.Start(test);
aProcess.EnableRaisingEvents = true;
aProcess.Exited += new EventHandler(aProcess_Exited);
try
{
//read synchronously to get the port number
string aPortInformationLine = aProcess.StandardOutput.ReadLine();
if (!aProcess.HasExited)
{
aProcess.Kill();
Debug.Print("Process Has Exited");
}
//return true;
errorOut = String.Format("Could not start process with command line : {0} from .rtext file {1}", aCommandLine, aRTextFilePath);
port = -1;
return false;
}
catch (Win32Exception ex)
{
Debug.WriteLine(ex.NativeErrorCode.ToString());
errorOut = String.Format("Could not start process with command line : {0} from .rtext file {1}. Error : {2}", aCommandLine, aRTextFilePath, ex.NativeErrorCode.ToString());
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
errorOut = String.Format("Could not start process with command line : {0} from .rtext file {1}. Error : {2}", aCommandLine, aRTextFilePath, ex.Message);
}
だから私はcmdを使ってある種のrubyサーバーを起動しています。プロセスが開始され、新しく作成されたプロセスからの出力を読み取ることができます。ただし、killコマンドが実行されると、例外はスローされませんが、rubyプロセスは終了しません。
これはcmdの使用と関係がありますか?私は何か他のことを間違っていますか?ありがとう
編集:
私はProcessExplorerを使用し、キルの前後に2枚の写真を撮りました。
前:
後:
したがって、cmd.exeが停止している間、rubyはなんとか続けて、別の日を見るために生きることができます。
Edit2:
私の問題への回答:C#でプログラム的にプロセスツリーを強制終了します