Tag: 单身

C#/ mono:获取Windows和Linux上的子进程列表

我有以下代码通过与ntdll交互获取Windows上的子进程列表。 在Linux上有没有相当于’NtQueryInformationProcess’的东西,它是我指定进程的父进程的进程ID(如pbi.InheritedFromUniqueProcessId)? 我需要通过Mono在Linux上运行代码,所以我希望我只需要更改获得父进程ID的部分,以便代码与Windows上的代码保持一致。 public IList GetChildren( Process parent ) { List children = new List(); Process[] processes = Process.GetProcesses(); foreach (Process p in processes) { ProcessBasicInformation pbi = new ProcessBasicInformation(); try { uint bytesWritten; NtQueryInformationProcess(p.Handle, 0, ref pbi, (uint)Marshal.SizeOf(pbi), out bytesWritten); // == 0 is OK if (pbi.InheritedFromUniqueProcessId == parent.Id) children.AddRange(GetChildren(p)); } catch { } […]

C#垃圾收集器似乎太早关闭了我的StreamWriter

我有一个单一的记录器类。 在它的析构函数中,我调用Close()打印日志的页脚,然后关闭StreamWriter。 public void Close() { WriteLogFileFooter(); _logFile.Flush(); _logFile.Close(); } 问题是当从程序中的其他地方调用System.Enviornment.Exit(1)时(我自己没有编写的部分),页脚永远不会打印,我的记录器会因尝试写入封闭流而抛出exception。 我只能假设Exit命令导致我的StreamWriter在我的Singleton被破坏之前被关闭。 我尝试在我的StreamWriter上使用GC.SupressFinalize(),但这似乎没有帮助。

如何延迟属性中的静态初始化

我创建了一个类,它是一个单例(第五个版本)和一个(dependency injection)工厂之间的交叉。 称之为“单声道工厂”? 它工作,看起来像这样: public static class Context { public static BaseLogger LogObject = null; public static BaseLogger Log { get { return LogFactory.instance; } } class LogFactory { static LogFactory() { } internal static readonly BaseLogger instance = LogObject ?? new BaseLogger(null, null, null); } } //USAGE EXAMPLE: //Optional initialization, done once when the […]