我在想,如果我有一個程序創建另一個進程,創建的進程是否在創建者內部運行?如果是這樣,它是否總是(是否有辦法將它附加到另一個進程)?子進程是否總是在父進程內運行?是否...線程...?
我問的原因實際上是因爲我試圖確定是否製作一個特定的線程,後臺線程。這裏是場景:
進程A正在啓動調用wcf服務的程序B.但是,我正在從程序B產生一個線程來進行實際的服務調用。如果我將線程設置爲後臺線程並且進程A崩潰或終止,線程是否會終止?如果是這樣,我怎樣才能從進程中解耦線程?
我在想,如果我有一個程序創建另一個進程,創建的進程是否在創建者內部運行?如果是這樣,它是否總是(是否有辦法將它附加到另一個進程)?子進程是否總是在父進程內運行?是否...線程...?
我問的原因實際上是因爲我試圖確定是否製作一個特定的線程,後臺線程。這裏是場景:
進程A正在啓動調用wcf服務的程序B.但是,我正在從程序B產生一個線程來進行實際的服務調用。如果我將線程設置爲後臺線程並且進程A崩潰或終止,線程是否會終止?如果是這樣,我怎樣才能從進程中解耦線程?
Windows進程是相互獨立的。父母和子女的過程生活並沒有明確的聯繫。
一個線程在創建它的過程中擁有它的生命週期,並在創建過程退出時(如果不在之前)終止。
如果一個進程希望控制另一個進程的生命週期,它需要有一個HANDLE
到受控進程。這可以通過作爲受控進程的創建者(這裏,該句柄從創建調用返回)或者(通過給定正確的權限)通過OpenProcess得到。在.Net中,這是通過Process class上的Get*
方法完成的。
進程不在Windows的另一個進程中運行(線程在進程內運行)。
在您的方案中,一旦程序B終止,線程也應該終止。
進程A上發生的事情根本不會影響線程。
從描述中可以看出,您正在使用程序,進程和線程,但它們不是。請具體說明您使用的是哪一個。 – user470379 2010-11-02 17:28:15
「從流程中解耦」線程是不可能的。 「從流程中取出」的線程是一個只有一個線程的流程。 – 2010-11-02 17:29:17