2011-04-27 36 views
0

如果在我的代碼中,我要調用execv,然後在調用execv之後我有幾行代碼,這些行會被執行,還是不會被執行,因爲無論由execv啓動了什麼,都會替換當前進程?execv是否會像這樣取代當前進程?

+0

我重新標記此刪除C++,並添加了POSIX和系統調用鍵。對於execv *(),沒有任何C和C++的具體內容。 – 2011-04-27 04:34:07

回答

2

它們不會被執行,除非execv()調用失敗。 execv()完全取代了調用它的進程中運行的程序。

+0

我注意到這通常是這種情況,但是如果我用execv運行睡眠,那麼它將繼續執行以下行。這是爲什麼? – 2011-04-27 04:49:10

+0

@ z-buffer,如果'execv()'返回,則表示失敗;如果你檢查返回值,你會發現它是-1。看'errno'找出原因。但是,無論如何,fork和exec睡眠程序都沒有什麼意義 - 子進程不會做任何事情,除非存在一段時間。如果你讓父母等待它實現一個延遲,只需使用'sleep()'函數。 – Wyzard 2011-04-27 04:56:56

1

他們不會得到執行,除非你分叉線程並在其中一個上調用execv。

+1

即使在這種情況下。 POSIX表示:「對於具有多個線程的進程調用任何* exec *函數將導致所有線程被終止,並且新的可執行映像被加載並執行。」 – Wyzard 2011-04-27 04:33:20

+0

好的。感謝您的提醒! – 2011-04-27 04:39:05

相關問題