例如,当您运行驻留在相对于您正在使用的机器的网络路径上的可执行文件时\\networkmachine\folder\target.exe arg1 arg2
,我知道它是在本地执行的,但有人知道命令行参数是否最终通过网络连接传递?
问问题
422 次
1 回答
0
当然不是。开始思考位于网络位置的二进制文件如何在本地机器上执行。当您执行命令时,负责命令执行的即时任务(在 Linux shell 中,在 Windows 中我不知道是什么)将您输入的整个命令作为其参数解析它以了解它是执行的指令可执行文件,第一个参数是可执行文件的名称,下一个参数是要传递给它的参数。然后它尝试开始执行,在 Linux 中它开始执行,fork()
然后exec()
. 基本上,尝试将可执行文件加载到内存中,然后在开始执行之前保留参数。要将可执行文件加载到内存中,它必须读取可执行文件,这是它将尝试读取可执行文件的时间,这正是它将执行网络操作(在您的情况下)或磁盘读取操作的时间,如果它在磁盘中。如果它在 Linux 和 NFS 类型的网络托管文件中,网络操作将再次下降一层,因为加载程序会定期读取文件,而 NFS 层会执行必要的网络操作以使数据可用。在这个序列中,您不必通过网络发送参数。
因此,总而言之,参数永远不会通过网络发送。
于 2013-11-14T08:34:13.040 回答