2010-11-02 104 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上發生的事情根本不會影響線程。

相關問題