从unix中的两个屏幕运行相同的命令会发生什么?

时间:2012-05-04 17:44:04

标签: unix

我需要从目录中删除相当数量的大文件。我使用了' rm *'删除文件,然后转到另一个屏幕来处理其他内容。过了一会儿,我用了' rm *'在同一个目录上,忘记我已经完成了。

我收到错误说" rm:无法删除`filename':没有这样的文件或目录。" 然后我去了第一个窗口,发生了类似的错误。

屏幕是否会竞争,看看哪个先完成了rm?或者服务器以某种方式线程化进程?服务器'当屏幕在同一目录上执行相同的命令时,它们彼此协同工作?

2 个答案:

答案 0 :(得分:2)

在每种情况下,rm只是取消链接每个文件的目录条目。这两个进程相互竞争,但很可能只是通过从一个进程到另一个进程的上下文切换而“线程化”在一起。如果准备取消链接文件,然后关闭上下文,其竞争对手可能会有机会取消链接同一文件。然后当第一个返回时,文件不再存在,所以他移动到那里的下一个条目。

正如heximal所说,在这种情况下(rm *),星号已经扩展为文件列表,这意味着您应该在这两个进程之间获得一个完整的列表,表明您想要的每个文件删除已经不见了。

答案 1 :(得分:1)

事情不是它执行相同的命令。实际上,没有任何重要的事情发生。如果未找到指定的文件,rm命令将完成,并显示错误。当您指定filemask(*)时,rm开始删除与该掩码匹配的目录中的所有文件。首先,该进程获取目录中的文件列表,然后获取此列表并执行每个文件的删除。第二个rm进程,你lauch做的绝对相同。它检索文件列表并开始逐个删除它们。并且可能存在第一个进程删除第二个进程列表中的文件的情况。当第二个进程提取尝试删除该文件时(已经删除)'没有这样的文件或目录'错误发生,rm完成。