【发布时间】:2016-10-13 14:07:13
【问题描述】:
尽管我经常使用 linux,但我仍然对 linux shell 运行程序的角色感到困惑。
我知道有两种类型的 shell,交互式 shell 和非交互式 shell。终端会话与交互式 shell 交互,脚本在非交互式 shell 中运行。但是除了读取输入和打印输出的能力之外,真的有其他区别吗?如果我从 shell 调用脚本,它是在这个交互式 shell 中运行还是在 shell 内新的非交互式 shell 中运行?
另外,当我通过交互式 shell 或图形界面调用二进制文件时,它是否总是在 shell 中运行,或者进程可以在没有 shell 的情况下运行?据说所有进程都通过 shell 与内核通信,但我很困惑,因为在 docker 中,您可以将入口点定义为二进制文件或“sh -c 二进制文件”。
【问题讨论】:
-
shell 是一个命令解释器。不多也不少。它和其他任何可执行文件一样是可执行文件,这也意味着它在游戏中不只是因为您执行了另一个可执行文件。一些“程序”确实使用“包装器外壳脚本”在执行某些二进制文件或脚本之前设置它们的环境。但这取决于该“程序”的设置方式。但是,通常会为登录的用户创建一个初始 shell 进程,即所谓的“登录 shell”。从该进程衍生出所有其他用户进程。