2012-06-04 33 views
0

我正在編寫一個程序來創建一個處理諸如執行基本命令,管道,重定向,執行後臺進程等基本功能的shell。但是我無法殺死後臺進程,我需要知道後臺進程的pid(),以便我可以隨pid一起發送kill命令。任何想法如何從ac pogram獲得後臺進程的pid()? 爲了運行命令,我將命令行輸入到數組中,解析並將命令放入arr [0]中,並將後續參數放入後續索引中,我將系統的PATH放入另一個數組中,並將它們存儲爲通過使用strtok和delim選項作爲字符串,在此之後,我將命令連接到路徑,然後執行execv()。從c prog查找後臺進程的pid

我被困在這個部分,我必須殺死一個後臺進程。任何建議都會非常有幫助。

在此先感謝。

+2

但'execv()'不創建一個新的進程,但隨着替代當前程序一個新的,wiouth改變PID!你必須調用fork()來創建一個新的進程。並且'fork()'返回新進程的PID ... – rodrigo

+0

我打電話給fork,然後在子進程中執行一個execv,但是如何獲得後臺進程的PID? – user1434883

+1

你有沒有想過閱讀fork(2)的文檔? Stackoverflow不是您的手冊頁的替代品。 – tbert

回答

1

你應該做這樣的事情:

#include <sys/types.h> 
#include <sys/wait.h> 
#include <unistd.h> 

int main() 
{ 
    pid_t pID = fork(); 
    if (pID == 0) { 
     execl("/bin/ls", "/bin/ls", "-r", "-t", "-l", (char *) 0); 
    } else { 
     waitpid(pID, NULL, 0); // wait for child process 
    } 
} 
1

fork返回子的PID的父進程,將它存儲在某處,然後用它來殺人?

0

你可以調用getpid()(在childprosses),或在子進程的PID返回給父母打電話時fork()