在学了在学了!

在学了在学了!

3个粉丝

36

问答

104

专栏

162

资料

在学了在学了!  发布于  2020-08-10 10:21:22
采纳率 0%
36个问答
人在车底,非常的菜。
2473

在使用进程时,子进程没有设置判断它的子进程结束会不会出现资源占用的问题?

 

在编程过程中使用了fork函数分出一个子进程,但是在循环当中,子进程分离出它的子进程,主进程设置了等待子进程结束,子进程是否需要也设置等待其子进程结束?

while((ent=readdir(dir))!=NULL)//读取目录流,检查下个目录流入口是否存在
{
    if(strcmp(ent->d_name,".")==0||strcmp(ent->d_name,"..")==0)//跳过上层目录
    {
    continue;
    }
    struct stat st;
    stat(ent->d_name,&st);//获取文件信息到st结构体
    if(S_ISDIR(st.st_mode)==0)//判断是否为文件,是则对其进行操作
    {
        if( ent->d_name[0]=='s' && ent->d_name[1]=='d' )//判断前缀为sd的文件
        {
            pid_t fpid=fork();
            if(fpid<0)
            {
            perror("fork");
            continue;
            }
        else if(fpid==0)
        {
        int flag=0;    
        alarm(300);
        sprintf(command, "%s%s", "fsck.fat -a /dev/",ent->d_name);
        if( (flag=system(command) )==0)//判断修复命令是否成功
        {
        printf("Repair success\n");    
        exit(0);
        }
        else
        {
            printf("Repair failed errno = %d\n",errno);
            exit(-1);
        }
        }
    else 
    {
    int status = 0;
    wait(&status);
    sprintf(filename, "%s%s", dirPath, ent->d_name);
    unlink(filename);//移除文件
    if(WIFEXITED(status)==0)//超时退出
    {
    printf("TimeOut : %s\n",ent->d_name);
    if( (fp = fopen("error","wb") ) == NULL )
    {
    perror("fopen");
    }
    fclose(fp);
    }
    else if(WEXITSTATUS(status)==0)//正常退出
    {
    printf("Success : %s\n",ent->d_name);
    if( (fp = fopen("ok","wb") ) == NULL )
    {
    perror("fopen");
    }
    fclose(fp);
    }
    else//失败
    {
        printf("Failed : %s\n",ent->d_name);
        if( (fp = fopen("error","wb") ) == NULL )
        {
        perror("fopen");
        }
        fclose(fp);
    }
    }
    }
}

代码如上

我来回答
回答1个
时间排序
认可量排序

在学了在学了!

3个粉丝

36

问答

104

专栏

162

资料

在学了在学了! 2020-08-10 10:22:05
认可0

上述代码是跑在while(1)循环里的

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区