2012-10-12 80 views
1

我在Linux上用C++編寫我的應用程序。 C++有一個叫做'system'的函數來執行一個程序。從Linux上的C++文件打開一個進程

我試着從C打開GNOME系統監測++這樣的:

system("gnome-system-monitor"); 

然而,我的應用程序塊的線程,當我把這個「系統」的功能,直到我關閉的Gnome的窗口系統監測。

任何其他方式來打開文件的進程而不阻塞調用者進程?

+1

嘗試使用叉 – zapredelom

+1

這將是'fork()'後面跟着一個'exec()'函數,但是這是更低級和複雜的。 –

+1

您應該使用fork/exec創建子進程,並在子進程中執行gnome-system-monitor。 – bbg

回答

2

的經典方法,其中在任何Linux或以其他方式基於POSIX的系統的工作原理,是

if (0 == fork()) { 
    execlp("gnome-system-monitor", "gnome-system-monitor", (char *)NULL); 
} 

(與該實施例中的處理省略錯誤。)此(a)中創建一個新的過程,(b)中在該新進程中,在搜索PATH環境變量以找到這樣的命令之後運行「gnome-system-monitor」,(c)將其名稱「gnome-system-monitor」作爲argv [0]傳遞並且沒有其他參數。在父母中,一旦創建新流程,它就會提前發佈,而無需等待任何結果。

有關更多詳細信息,請參閱手冊頁forkexeclp

+0

如何在調用execlp之後,我的調用者線程停止執行 – jondinham

+1

調用'execlp'或任何'exec'系列的進程已將其程序全部替換爲新進程 - 請參見[手冊頁](http:///linux.die.net/man/3/execlp)。這就是爲什麼你在調用它之前要「fork」的原因。這是你的意思,還是別的? –

+0

它看起來像fork沒有創建進程,之後,調用'exec'替換我現有的進程 – jondinham

1

fork/exec或posix_spawn。如果你使用的話,glib也有GSpawn。

0

是的。在分部線程上調用系統函數。

相關問題