在unix中从两个屏幕运行同一命令时会发生什么情况?

在unix中从两个屏幕运行同一命令时会发生什么情况?,unix,Unix,我需要从一个目录中删除相当数量的大文件。我使用“rm*”删除文件,然后转到另一个屏幕处理其他内容。过了一会儿,我在同一个目录上使用了“rm*”,忘记了我已经这么做了 我在说“rm:无法删除`filename'”时出错:没有这样的文件或目录 然后我转到第一个窗口,出现了一个类似的错误 屏幕是否在争先恐后地看谁先完成了rm?还是服务器以某种方式执行进程?当服务器在同一目录上执行同一命令时,它们的屏幕如何相互配合 问题不在于它执行相同的命令。事实上,没有什么犯罪的事情发生rm命令将以错误结束。当您指定

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

我在说“rm:无法删除`filename'”时出错:没有这样的文件或目录 然后我转到第一个窗口,出现了一个类似的错误


屏幕是否在争先恐后地看谁先完成了rm?还是服务器以某种方式执行进程?当服务器在同一目录上执行同一命令时,它们的屏幕如何相互配合

问题不在于它执行相同的命令。事实上,没有什么犯罪的事情发生<如果找不到指定的文件,则code>rm命令将以错误结束。当您指定filemask(*)时,rm将开始删除目录中与该掩码匹配的所有文件。首先,该进程获取目录中的文件列表,然后获取该列表并分别删除每个文件。您启动的第二个rm流程也完全相同。它检索文件列表并开始逐个删除它们。当第一个进程删除第二个进程列表中的文件时,可能会出现这种情况。当第二个进程fetch尝试删除该文件(已删除)时,“没有这样的文件或目录”错误发生,rm完成。

问题不在于它执行相同的命令。事实上,没有什么犯罪的事情发生<如果找不到指定的文件,则code>rm命令将以错误结束。当您指定filemask(*)时,rm将开始删除目录中与该掩码匹配的所有文件。首先,该进程获取目录中的文件列表,然后获取该列表并分别删除每个文件。您启动的第二个rm流程也完全相同。它检索文件列表并开始逐个删除它们。当第一个进程删除第二个进程列表中的文件时,可能会出现这种情况。当第二个进程fetch尝试删除该文件(已删除)时,“没有这样的文件或目录”错误发生,rm完成。

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


正如heximal所说,在本例中(
rm*
),星号已经扩展为文件列表,这意味着您应该在两个进程之间获得一个完整的列表,其中您要删除的每个文件都已经消失了。

在每种情况下,
rm
ing只是取消每个文件的目录项的链接。这两个进程相互竞争,但很可能只有通过从一个进程到另一个进程的上下文切换才能“线程化”在一起。如果一个用户准备断开一个文件的链接,然后切换上下文,那么它的竞争对手很可能有机会断开同一个文件的链接。然后,当第一个返回时,文件不再存在,因此他将移动到存在的下一个条目


正如heximal所说,在本例中(
rm*
),星号已经被扩展为一个文件列表,这意味着您应该在两个进程之间获得一个完整的列表,其中列出您想要删除的每个文件都已经消失了。

哦,我明白了。这也适用于其他所有屏幕命令,那么?不仅仅是在同一个目录中使用rm。对,即使是在控制台上执行的命令也可以与系统的其余部分一起执行多任务。这通常涉及大量的上下文转换。谢谢你的回答,格雷森@第六条:需要认识到的重要一点是,通配符是由shell扩展的,而不是由程序扩展的。程序只看到要处理的文件列表。。。不管你运行的是
rm
还是
这个千禧年编写的最棒的程序,他们都只看到一个文件列表。哦,我明白了。这也适用于其他所有屏幕命令,那么?不仅仅是在同一个目录中使用rm。对,即使是在控制台上执行的命令也可以与系统的其余部分一起执行多任务。这通常涉及大量的上下文转换。谢谢你的回答,格雷森@第六条:需要认识到的重要一点是,通配符是由shell扩展的,而不是由程序扩展的。程序只看到要处理的文件列表。。。不管你运行的是
rm
还是
这个千禧年编写的最棒的程序,他们都只看到一个文件列表。啊,好的。你知道这会使执行效率降低还是相同吗?如果你运行一个rm或两个或三个rm,那么就没有任何好处了。您知道这会使执行效率降低还是相同吗?如果您运行一个rm或两个或三个rm,则没有任何优势