2010-11-02 106 views
0

我在想,如果我有一个程序创建另一个进程,创建的进程是否在创建者内部运行?如果是这样,它是否总是(是否有办法将它附加到另一个进程)?子进程是否总是在父进程内运行?是否...线程...?

我问的原因实际上是因为我试图确定是否制作一个特定的线程,后台线程。这里是场景:

进程A正在启动调用wcf服务的程序B.但是,我正在从程序B产生一个线程来进行实际的服务调用。如果我将线程设置为后台线程并且进程A崩溃或终止,线程是否会终止?如果是这样,我怎样才能从进程中解耦线程?

+2

从描述中可以看出,您正在使用程序,进程和线程,但它们不是。请具体说明您使用的是哪一个。 – user470379 2010-11-02 17:28:15

+0

“从流程中解耦”线程是不可能的。 “从流程中取出”的线程是一个只有一个线程的流程。 – 2010-11-02 17:29:17

回答

2

Windows进程是相互独立的。父母和子女的过程生活并没有明确的联系。

一个线程在创建它的过程中拥有它的生命周期,并在创建过程退出时(如果不在之前)终止。

如果一个进程希望控制另一个进程的生命周期,它需要有一个HANDLE到受控进程。这可以通过作为受控进程的创建者(这里,该句柄从创建调用返回)或者(通过给定正确的权限)通过OpenProcess得到。在.Net中,这是通过Process class上的Get*方法完成的。

3

进程不在Windows的另一个进程中运行(线程在进程内运行)。

在您的方案中,一旦程序B终止,线程也应该终止。

进程A上发生的事情根本不会影响线程。

相关问题