【发布时间】:2018-10-11 02:37:52
【问题描述】:
所以我试图遍历一个目录(和子目录)并创建新进程来对文件进行排序和遍历子目录。但是,我在理解我的代码会有多大用处时遇到了一些麻烦。据我了解, wait() 将使父进程休眠,直到子进程终止。目前我的递归函数是
void iterate_dir(char* name){
DIR *dd = opendir(name);
struct dirent *curr;
while((curr = readdir(dd))!=NULL){
if((strcmp(curr->d_name,".")==0 || strcmp(curr->d_name,"..")==0) && curr->d_type==DT_DIR){
continue;
}
int status = -1;
int pid = fork();
if(pid==0){
//child process
if(curr->d_type==DT_DIR){
printf("DIRECTORY:\t%s\n", curr->d_name);
char new_path[strlen(curr->d_name)+strlen(name)+2];
sprintf(new_path,"%s/%s",name,curr->d_name);
//recurse, iterate sub directory
iterate_dir(new_path);
_exit(getpid());
}else{
printf("FILE:\t%s\n", curr->d_name);
//sort the file
_exit(getpid());
}
}
wait(&status);
}
closedir(dd);
}
给定初始目录,它可以工作,但我关心的是 wait() 函数。我希望代码在子进程执行时继续遍历目录,并且当前等待防止这种情况发生。但我仍然需要防止僵尸孩子。将使用 waitpid() 来代替允许我拥有此功能(即,允许循环在子进程执行时继续通过目录的其余部分),我可以只在 main 中使用 1 等待,这将防止所有创建的进程成为僵尸,还是我应该采取不同的方法?这是一个学校项目,我需要使用 fork(而不是 exec)来创建一个用于遍历子目录的新进程和一个用于对每个文件进行排序的新进程。
【问题讨论】:
标签: c fork wait child-process waitpid