- 用户输人的命令行由一一个name,零个或者多个参数组成,它们都由一个或者多个空格分隔开。如果name是一一个内置命令,那么shell就立即处理它,并等待下一个命令行。否则,shell 就假设name是一个可执行文件,在一个初始的子进程(作业)的上下文中加载并运行它。作业的进程组ID与子进程的PID相同。
- 每个作业是由--个进程ID(PID)或者-一个作业ID(JID)来标识的,它是由一个shell分配的任意的小正整数。JID 在命令行上用前缀“%”来表示。比如,“85”表示JID5,而“5”表示PID 5。
- 如果命令行以&来结束,那么shell 就在后台运行这个作业。否则,shell 就在前台运行这个作业。
- 输人Ctrl+C(Ctrl+ Z),使得内核发送一个SIGINT(SIGTSTP)信号给shell, shell 再转发给前台进程组中的每个进程
- 内置命令jobs列出所有的后台作业。
- 内置命令bg job通过发送- -个SIGCONT信号重启job,然后在后台运行它。job 参数可以是一个PID,也可以是一个JID。
- 内置命令fg job通过发送一个SIGCONT信号重启job,然后在前台运行它。
- shell回收它所有的僵死子进程。如果任何作业因为收到-一个未捕获的信号而终止,那么shell就输出一条消息到终端,消息中包含该作业的PID和对该信号的描述。
图8-46展示了一个shell会话示例。