看板 C_and_CPP 關於我們 聯絡資訊
有一個觀念需要澄清一下, fork() 的回傳值有以下三種情況 -1: fork() 發生錯誤, 無 child process 產生. 0: 在child process裡 >0: 在parent process裡, fork() 回傳值, 即是 child process 的 PID 請看下面這個例子: pid_t pid; if ((pid = fork()) < 0) { /* Error */ return 1; } else if (pid == 0) { /* Child process */ /* 在此,你可以執行exec系列函式 */ execv("/usr/local/bin/dillo", NULL); /* 有一點要注意, 成功呼叫 execv 之後, 以下敘述都不會執行 */ printf("execv() failed\n"); /* 只有失敗了才會執行到這行 */ } /* Parent process */ /* dillo 的 PID 對 parent process 來說, 就是 fork() 回傳值 */ printf("PID of dillo is %d\n", pid); 最後, 你提出的兩個問題, 回答如下: ※ 引述《vtr198172 (43米的深海)》之銘言: : 我有一個UI的主程式叫main,目前想利用exec和fork來做到: : (1)按下按鈕A, 開啟程式dillo : BUTTON A: : pid_t dillo_pid; : dillo_pid = fork(); : execv("/usr/local/bin/dillo&", NULL); <== 這段有問題 : (2)按下按鈕B, 結束程式dillo : BUTTON B: : system("kill -9 dillo_pid"); : 但是有幾個問題不知道要如何處理, : 1. execv這段程式不知道要如何寫才能讓dillo在背景執行? 答: 當你 fork 之後再執行 execv 時, 其功能就已經等於在 shell 上執行 dillo& 了. 無須再加 &, (其實加了也沒有作用). : 2. 要如何取得dillo的PID,因為fork()回傳的值是0,1,-1,不是dillo的pid 答: 上面的例子可以參考看看. : 開發平台: ( Linux) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.249.207.134