【发布时间】:2018-12-10 21:29:53
【问题描述】:
当我做类似的事情时
$ ./my-program foo bar
foo 和 bar 如何从 shell 传递到 my-program 的内存空间? my-program 是否通过系统调用获取它们?复制它们是内核的工作吗?
(请注意,我知道如何阅读和使用命令行参数。这不是我的问题。)
【问题讨论】:
-
是的,这是内核工作。这是你期待的答案吗?
-
可以接受一个更成熟的答案来解释高级别的机制。
-
最终(在分词、变量插值等之后)shell 将调用
exec*系列系统调用的成员,并将参数传递给它。man execve -
有
exec系列系统调用。它创建一个进程,其中命令行参数已经在某个预定义的地址到位。 -
考虑到Unix & Linux 关注 UNIX 实现细节的问题,作为学术好奇心的问题; StackOverflow 的范围仅限于实用、关于软件开发的可回答问题。
标签: linux shell unix command-line command-line-arguments