/// <summary>
 /// Attempt to use evil reflection tricks to determine the
 /// pid of a launched process.
 /// </summary>
 /// <remarks>
 /// Attempt to use evil reflection tricks to determine the
 /// pid of a launched process. This is helpful to ops
 /// if debugging a fencing process that might have gone
 /// wrong. If running on a system or JVM where this doesn't
 /// work, it will simply return null.
 /// </remarks>
 private static string TryGetPid(SystemProcess p)
 {
     try
     {
         Type clazz = p.GetType();
         if (clazz.FullName.Equals("java.lang.UNIXProcess"))
         {
             FieldInfo f = Runtime.GetDeclaredField(clazz, "pid");
             return(f.GetInt(p).ToString());
         }
         else
         {
             Log.Trace("Unable to determine pid for " + p + " since it is not a UNIXProcess");
             return(null);
         }
     }
     catch (Exception t)
     {
         Log.Trace("Unable to determine pid for " + p, t);
         return(null);
     }
 }