2013-01-08 78 views
-2

我需要在1个程序中创建3个进程来模拟死锁。我怎样才能定义我自己的过程?我不想简单地打开现有的流程。我们可以在C#中创建自己的过程吗?

例如,对于一个线程:

Thread X = new Thread(){ //insert whatever code here// }; 

我们怎样才能做到这一点的过程中,如:

Process P = new Process(){//insert different threads here//}; 
+9

你为什么要模拟使用过程?为什么不使用线程来模拟它? –

+0

用三个线程模拟死锁是不够的吗? – Christoffer

+0

我可以看到一个潜在的原因,为什么人们需要新的进程来模拟死锁 - 同时访问2+文件进行写入时出现死锁,但听起来这样的行为会比使用适当的模拟资源更容易/更可靠地获得几个过程。 –

回答

2

进程来自可执行文件。您可以编写Process.Start(@"C:\Something.exe")

+4

进程来自操作系统,有时从exe文件创建。 ; ) –

5
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Diagnostics; 

namespace ConsoleApplication1 
{  
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Process process = new Process(); 
      process.StartInfo.FileName = "notepad"; 
      //process.StartInfo.Arguments = "filename.txt" 
      process.StartInfo.UseShellExecute = false; 
      process.StartInfo.CreateNoWindow = true; 
      process.Start(); 
     } 
    } 
} 
+0

如果我声明一个方法,然后将它传递给进程,那么该怎么办?它工作吗? 像Process proc = new Process(method1)? – Optional

+0

@可选我不确定,但我不认为c#'Process'支持。 –

+0

ahh谢谢,cu你可以用线程做到这一点。 但我所做的是创建对象并锁定它们以模拟死锁。所以我想写我自己的过程。没有理由启动现有的一个 – Optional

0

你可能寻找Process.Start(静态或实例方法) - 它会启动您选择的可执行文件创建新的进程。

如果你正在寻找fork from Unix的实现,你不能真正在.Net中做到这一点,据我所知。

+0

当然,您总是可以通过动态获取您正在运行的可执行文件的路径来启动另一个“自己”实例,并且您可以使用命令行参数来指示什么是用户执行以及什么是程序化执行。 – Servy

+0

@Servy,是的,但它与叉子没有任何关系(叉子也不像OP想要的那样)。你的建议将允许在问题中对样本进行很好的近似。 –

+0

Fork根本不支持Windows,由于dll的加载方式,您只能从可执行映像启动进程。 Cygwin非常努力地模仿fork,但是当第三方dll(比如防病毒软件)强制自己进入流程时,它始终无法保持正确。 – Zarat

0

一个进程中的代码不能在另一个进程中执行。您需要某种形式的进程间通信或远程过程调用。

相关问题