好吧,很明顯,假設我們有兩個進程A
和F
。 F
想要在具有CPU控制時分叉A
(並且A
由於CPU處於F
而被暫停)。可能會從中分離出一個進程嗎?
我已經谷歌搜索,但沒有任何相關顯示。在Unix環境中可以這樣做嗎?
好吧,很明顯,假設我們有兩個進程A
和F
。 F
想要在具有CPU控制時分叉A
(並且A
由於CPU處於F
而被暫停)。可能會從中分離出一個進程嗎?
我已經谷歌搜索,但沒有任何相關顯示。在Unix環境中可以這樣做嗎?
我不認爲這是無論如何都沒有好主意,但它可能是可能的過程F
使用調試器接口連接到A
如ptrace
。做類似於暫停目標進程,保存其狀態,轉移進程以運行fork
,然後恢復其原始狀態。
應該指出,你的克隆過程可能需要處理線程等一些奇怪的情況。
從外部克隆進程肯定沒有標準和/或可移植的方式,但取決於操作系統,當然有可能的方式將流程從其任務中轉移出來,迫使它克隆自己或做任何你想做的事。
不,這將是一個巨大的安全漏洞,如果可能會導致敏感信息泄露。最好的情況是,你可以在父進程中設置一個信號處理程序,將fork(2)關閉子進程(可能是exec(2)預先配置的子進程?)。
我認爲通過查看具有CPU親和力設置的兩個進程之間的消息傳遞可以更好地服務,但即使如此,我認爲增益會是名義上的(過度優化問題?)。
http://www.freebsd.org/cgi/man.cgi?query=cpuset&apropos=0&sektion=0
這是不可能的原因是因爲,通常與fork()
,兩個進程之間開始有一個區別:fork()調用本身的返回值。如果在A
的代碼中沒有這樣的調用,那麼進程之間沒有任何區別,所以他們都會做同樣的事情,通常情況下,您希望某個進程開始做一些不同的事情。
你到底想要做什麼應該如何工作?
你能更好地解釋你的目標嗎?你爲什麼要在圖片中放置一個過程F,而看起來你想要的只是從外部克隆過程A.假設現在只有一個進程可以使CPU控制一直過時。 – jlliagre 2011-05-12 12:49:34
我只是好奇。我們不能從該程序代碼之外分叉進程嗎?沒有進一步的目標。 – 2011-05-12 13:22:15
好奇你接受一個答案告訴它是不可能的,而我和後來與技術細節Askurtun都回答這是可能的... – jlliagre 2011-05-13 09:09:48