
httpd
httpd 是 Apache 超文本传输协议 (HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池
Httpd 是由 ASF(apache software foundation)维护的开源项目之一也是目前最为流行的 web 服务器之一
login
login:某用户由/bin/login 登陆进系统后启动的 shell,跟这个用户绑定。这个 shell 是用户登陆后启动的第一个进程。login 进程在启动 shell 时传递第 0 个參数指明 shell 的名字,该參数第一个字符为”-“,指明这是一个 login shell。对 bash 而言,启动參数为”-bash”。当 bash 以 login shell 启动时,它会运行/etc/profile 中的命令,然后/etc/profile 调用/etc/profile. d 文件夹下的全部脚本。然后运行~/. bash_profile。/. bash_profile 调用/. bashrc,最后~/. bashrc 又调用/etc/bashrc。
要识别一个 shell 是否为 login shell。仅仅需在该 shell 下运行 echo
假设输出为该 shell 名字,加上一个’-‘前缀。则说明该 shell 为 login shell。比如-bash,-su 等等。实验一下。在本人的 Ubuntu 系统下。打开 Terminal,输入 echo $0,得到的是”bash”,说明这不是一个 login shell。而由 SSH 登陆到 server 上,运行相同命令。得到了”-bash”的结果,说明由 SSH 登陆的为 login shell
Shell 程序
shell 是一个交互型应用级程序,代表用户运行其他程序

Shell 程序示例:eval 函数

Parseline 函数解析以空格分隔的命令行参数,并构造传递给 execve 的 argv 向量
builtin_command函数检查第一个命令行参数是否是一个内置的shell命令
如果builtin_command返回0,shell创建一个子进程,并在子进程中执行所请求的程序
如果用户要求后台运行,则shell返回,等待下一个命令行;否则shell使用waitpid等待作业终止,作业终止时,shell开始下一轮迭代
shell 回收作业
- 在这个例子中 shell 可以正确等待和回收前台作业
- 但是后台作业呢?
- 后台作业终止时会成为僵尸进程
- 永远不会被回收,因为 shell 通常不会终止
- 将导致内存泄漏