[Mono-bugs] [Bug 657852] New: System.Diagnostics.Process HasExited property always returns true

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Mon Dec 6 18:27:41 EST 2010


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: mono-bugs at lists.ximian.com
        ReportedBy: novel at andrewrondeau.com
         QAContact: mono-bugs at lists.ximian.com
          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.


More information about the mono-bugs mailing list