我在Linux上用C++編寫我的應用程序。 C++有一個叫做'system'的函數來執行一個程序。從Linux上的C++文件打開一個進程
我試着從C打開GNOME系統監測++這樣的:
system("gnome-system-monitor");
然而,我的應用程序塊的線程,當我把這個「系統」的功能,直到我關閉的Gnome的窗口系統監測。
任何其他方式來打開文件的進程而不阻塞調用者進程?
我在Linux上用C++編寫我的應用程序。 C++有一個叫做'system'的函數來執行一個程序。從Linux上的C++文件打開一個進程
我試着從C打開GNOME系統監測++這樣的:
system("gnome-system-monitor");
然而,我的應用程序塊的線程,當我把這個「系統」的功能,直到我關閉的Gnome的窗口系統監測。
任何其他方式來打開文件的進程而不阻塞調用者進程?
的經典方法,其中在任何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]傳遞並且沒有其他參數。在父母中,一旦創建新流程,它就會提前發佈,而無需等待任何結果。
有關更多詳細信息,請參閱手冊頁fork
和execlp
。
fork/exec或posix_spawn。如果你使用的話,glib也有GSpawn。
是的。在分部線程上調用系統函數。
Gnome建立在GTk(包含Glib)之上,並且您可能需要Glib Spawning Processes函數。
當然,在Linux和Unix上,processes是forked。閱讀一本好書,如 advanced unix programming和advanced linux programming以瞭解更多關於過程的syscalls,特別是fork(2),execve(2),pipe(2)。還請閱讀關於proc(5)文件系統。
嘗試使用叉 – zapredelom
這將是'fork()'後面跟着一個'exec()'函數,但是這是更低級和複雜的。 –
您應該使用fork/exec創建子進程,並在子進程中執行gnome-system-monitor。 – bbg