如何在不冻结系统的情况下处理长时间中断

how to handle a long interrupt without freezing the system

我正在实现一个中断处理,它可以关闭来自 Linux 内核模块的打开的 txt 文件。 我能够获取 txt 文件路径(见图)。但是,当我尝试关闭该文件时,我的电脑总是死机。 我使用 close_fd() 但它不起作用 Result from dmesg, a txt file is detected in pid 10367 这是我的代码:

for_each_process(task_list) {
    pr_info("Process: %s\t PID:[%d]\t State:%s\n", 
            task_list->comm, task_list->pid,
            get_task_state(task_list->state));
    if (task_list->files == NULL) continue; // Ignore processes without files
    fdt = files_fdtable(task_list->files);
    int i=0;
    while(fdt->fd[i] != NULL) { 
        files_path = fdt->fd[i]->f_path;
        mode_path = fdt->fd[i]->f_mode;
        cwd = d_path(&files_path,buf,100*sizeof(char));

        printk(KERN_INFO "Open file with fd %d  %s mode: %d", i,cwd, mode_path);
        //Suppose that I can detect a txt file is running in pid 10367. And I want to safety close it
        if (task_list->pid == 10367){
            printk(KERN_INFO "This below function does not work");
            close_fd(fdt->fd[i]); 
        }  
        i++;
    }
}

不知道是哪一步出错了。有人可以审查并支持我吗? 最好的问候

我终于找到了解决办法。是filp_close()

flush_cache_all() ;             
close_result = filp_close(fdt->fd[i], NULL);

整个系统不会被冻结。 非常感谢您的建议。 问候