文件被system进程锁定,不能删除

文件被system进程锁定,不能删除,没有明显用户进程操作此文件。

软件UNLOCKER,WHOLOCKME,LOCK HUNTER之类的,可能需要重启才能解决问题,这在生产环境 中是不可接受的。

能作的还是慢慢搜索可用解决方案。。

然后,找到此个文档,显示了被SYSTEM占用文件的解决办法,并将此归为WIN2008的一个小BUG,但不知道实际效果如何。。:

http://stackoverflow.com/questions/4378192/windows-2008-r2-kernel-system-process-pid-4-is-locking-files-and-folders

Windows 2008 R2 - Kernel (System Process PID=4) is locking files and folders

As Dani has already mentioned in the comment:

It's a bug in Windows 7 and likely in Windows Server 2008 (possibly 64bit versions only). It surfaces when you disable Application Experience service.

Re-enabling this service has fixed this problem for me.

A bit more info here as to why it's causing a problem.

List of other SO questions which seem to be related:

### 回答1: 在 Linux ,你可以通过 chattr 命令来锁定用户根目录。chattr 命令是一个用于更改文件属性的工具,可以用来防止文件删除或修改。 在 C 语言,你可以使用 system 函数来调用 shell 命令。因此,你可以使用以下代码来锁定用户根目录: ``` #include <stdio.h> #include <stdlib.h> int main(void) { int status; char command[100]; sprintf(command, "chattr +i /root"); status = system(command); if (status == 0) { printf("锁定成功!\n"); } else { printf("锁定失败!\n"); } return 0; } ``` 请注意,这需要 root 权限才能执行。因此,你需要使用 `sudo` 命令来运行程序,或者在编译程序时使用 `sudo`。 ### 回答2: 要想在Linux系统下使用C语言实现锁定用户根目录,可以通过修改用户的权限及所属组的方式来实现。以下是实现的步骤: 1. 获取用户的UID:使用getuid()函数获取当前用户的UID。 2. 获取用户的根目录:使用getenv("HOME")函数获取当前用户的根目录路径。 3. 修改根目录的权限:使用chmod()函数修改根目录的权限,将其设置为只读或者不可访问。需要传入根目录路径及相应的权限标志。 例如,将根目录设置为只读,可以使用以下代码片段: ```c #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/stat.h> int main() { uid_t uid = getuid(); const char* rootDir = getenv("HOME"); if (rootDir == NULL) { printf("未找到用户根目录\n"); return 1; } int result = chmod(rootDir, S_IRUSR | S_IRGRP | S_IROTH); if (result != 0) { printf("修改根目录权限失败\n"); return 1; } printf("已锁定用户根目录\n"); return 0; } ``` 请注意,该代码仅仅是一个示例,实际上, 这种方式并不能真正保证用户无法访问自己的根目录,因为用户可以使用sudo或其他提权方式修改根目录的权限。要真正实现根目录的锁定,还需要其他措施,例如修改系统配置文件以限制用户的权限。 ### 回答3: 要在Linux C实现锁定用户根目录,可以按照以下步骤进行: 1. 使用`chroot`命令,将进程的根文件系统更改为用户指定的目录。这将限制进程在指定目录内进行所有文件和目录操作,使其无法访问其他目录。 2. 使用`setuid`函数将进程的用户ID更改为root或具有足够权限的用户ID。这将确保进程具有足够的特权来更改根目录。 3. 使用`chdir`函数将进程的工作目录更改为用户指定的目录。这样,无论进程打开什么文件,它都将相对于指定的目录路径。 4. 使用`chroot`命令将进程的根文件系统更改回原始的根文件系统,以确保其他进程不受影响。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { const char* userDirectory = "/path/to/user/directory"; // 切换到用户指定的目录 if(chroot(userDirectory) != 0) { perror("chroot failed"); exit(EXIT_FAILURE); } // 设置进程的用户ID为root或具有足够权限的用户ID if(setuid(0) != 0) { perror("setuid failed"); exit(EXIT_FAILURE); } // 将工作目录更改为用户指定的目录 if(chdir("/") != 0) { perror("chdir failed"); exit(EXIT_FAILURE); } // 执行在锁定根目录下的其他任务 // 将根文件系统更改回原始根文件系统 if(chroot("/") != 0) { perror("chroot failed"); exit(EXIT_FAILURE); } return 0; } ``` 请注意,实现锁定用户根目录可能需要root权限或足够的特权。此示例代码仅为演示目的,实际使用时需要根据特定环境和需求进行适当的修改和安全性验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值