https://bugzilla.novell.com/show_bug.cgi?id=657852
https://bugzilla.novell.com/show_bug.cgi?id=657852#c0 Summary: System.Diagnostics.Process HasExited property always returns true Classification: Mono Product: Mono: Class Libraries Version: 2.8.x Platform: VMWare OS/Version: SuSE Linux 10.1 Status: NEW Severity: Critical Priority: P5 - None Component: System AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.215 Safari/534.10 I'm seeing this on both the official VMware VM for 2.8.1, and 64-bit Ubuntu where I built 2.8.1 from scratch. - System.Diagnostics.Process.HasExited always returns true. - System.Diagnostics.Process.Exited is triggered even when the parent process hasn't exited. - System.Diagnostics.Process.GetCurrentProcess().Kill(); throws a "The process already finished" exception. (This never happens on .Net) These bugs effectively prevent using System.Diagnostics.Process to monitor and manage other processes within Mono!!! Reproducible: Always Steps to Reproduce: 1 - Use Process.GetProcessById(some ID); with a running process 2 - Observe that HasExited is true. -------------------- Here are some helper programs. Use the first one to get a process running and obtain its process id. Pass the process ID as a command-line argument to the second program. It will demonstrate that HasExited is true even when DummyProcess is running. using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Threading; namespace DummyProcess { class MainClass { public static void Main (string[] args) { Console.WriteLine("Process ID: {0}", Process.GetCurrentProcess().Id); Console.Read(); } } } using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Threading; using Mono.Unix; using Mono.Unix.Native; namespace ProcessKiller { class Program { static void Main(string[] args) { try { int parentProcessId = Convert.ToInt32(args[0]); Process parent; try { parent = Process.GetProcessById(parentProcessId); } catch (ArgumentException) { // If the parent process can't be obtained, just return. It means that the parent process is done return; } Console.WriteLine(process.HasExited); } } } Actual Results: HasExited is always true Expected Results: HasExited should be false until the process exits -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
