2017-04-13 61 views
0

我創造C中的應用程序,我有命令execlp,但每次我執行它我「丟失」我目前的終端的時間來執行Firefox,但在execlp後,我仍然需要使用終端,我以前,所以我的問題是:有沒有一種方法,我可以在一個終端電話execlp,它執行另一個沒有阻止我在嗎?Execlp執行在另一端

這裏是我的代碼片段:

pid_t child = fork(); 
if (child == -1) { 
    perror("fork error"); 
} else if (child == 0) { 
    exec_pid = getpid(); 
    execlp("firefox", "firefox", URL, NULL); 
    perror("exec error"); 
} 
    // keep with program logic 
+0

你說的「‘失去’你當前終端」究竟意味着什麼?你的意思是它沒有注意力嗎? – rici

+0

http://stackoverflow.com/questions/11807688/how-to-detach-a-process-from-terminal-in-unix – stark

+0

我執行exec後繼續使用相同的終端我必須按任意鍵或者殺了我的程序,所以這就是我說我丟了終端的意思。 –

回答

2

如果我正確認識你,你說你的程序啓動火狐,然後讓你的外殼的控制,直到火狐終止。如果是這種情況,有幾種方法可以解決這個問題。

最簡單的解決方案是在後臺運行程序。像./my_program &一樣執行它,它將在一個單獨的過程中啓動,並且您的終端的控制權將立即返回給您。

如果你想從你的C代碼解決這個問題,第一步將是叉後打印出來的子進程的進程ID。在單獨的shell中,使用ps來監視您的程序和分叉的PID。確保你的程序實際上正在終止,並且它不僅僅是等待某件事。

+0

另請參見[此相關的問題](https://askubuntu.com/questions/484993/run-command-on-anothernew-terminal-window),用於運行的程序,使得它在一個新的,單獨的終端窗口啓動的方式。 – bta