Unix/Linux编程实践读书笔记3
第8章 进程和程序:编写命令解释器sh
1.shell是如何运行程序的
shell打印提示符,输入命令,shell运行这个命令,然后shell再次打印提示符,如此循环反复。
- 用户键入程序名a.out
- shell 建立一个新的进程运行这个程序
- shell从磁盘载入程序
- 程序在它的进程中运行直到结束
实现shell需要用到的知识:运行一个程序,建立一个进程,等待exit()
一个程序如何运行另外一个程序:程序调用execvp(progname, arglist)
它的运作流程:
- 程序调用execvp;
- 内核从磁盘将程序载入;
- 内核将arglist复制到进程;
- 内核调用main(argc, argv)。
如何建立一个新的进程:程序调用fork
父进程如何等待子进程的退出:调用wait等待子进程结束
wait()做两件事:暂停调用它的进程直到子进程结束,取得子进程结束时传递给exit()的值。
键入Ctrl-C键,子进程终止,shell也终止了,因为键盘信号SIGINT发给了所有连接的进程!注意SIGINT信号的影响。
改进:一行多个命令(ls ; date;ps ),后台进程,退出命令。
第9章 可编程的shell、shell变量和环境:编写自己的shell