【发布时间】:2013-04-04 02:26:04
【问题描述】:
我正在尝试了解程序、shell 命令和操作 系统工作。请原谅我的无知,因为我是新手。
当我在命令行上使用 C 编译器时,当我键入 cc [filename] ,我想外壳使用 fork() 系统调用来 复制它的进程,然后一个 exec() 系统调用将加载 cc 编译器可执行到子进程的核心映像中。然后 包含 cc 可执行文件的子进程将在 执行 shell 的父进程是否等待。对吗?
如 cp、mv、ls 等 shell 命令呢?这些是什么? 它们是可执行程序,也将在新的环境中执行吗? 由shell分叉的子进程? shell脚本呢?假设我创建了一个简单的 shell 脚本 喜欢这个(请忽略我不知道该怎么做的任何错误 然而):
echo "Hello"
date
echo
cc -o test file1.c file2.c file3.c
然后我使用命令行执行这个脚本。将 命令行 fork() 一个新进程和 exec() 这个脚本在新的 过程?然后将这个包含脚本 fork() 的新进程 执行日期、cc编译器等的其他进程??
我希望这听起来不会太令人困惑,因为我是 =/。
【问题讨论】:
标签: shell executable system-calls