《Unix/Linux编程实践教程》笔记(7)──进程和程序:编写命令解释器sh
内容
shell是如何运行程序的――shell用fork建立新进程,用exec在新进程中运行用户指定的程序,最后shell用wait等待新进程结束。
执行文件 | execvp(const char * file, const char * argvp[]) |
---|---|
创建进程 | fork(void) |
等待进程结束 | wait (int * statusptr) |
习题
8.5
FILE有缓冲,所以会输出4条记录。可以在父进程中fflush(fp)强制清空缓冲区,这样就只有三条记录了。
8.10
当有多个子进程同时退出时,wait会同时收到退出信号。这里可以用waitpid()来解决。
8.12
可以在父进程中屏蔽 SIGINT , SIGQUIT
signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN);
在子进程中恢复对 SIGINT , SIGQUIT 的默认处理
signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL);
结束
在这章,学会了简单的fork子进程,让子进程调用系统接口去执行命令,一个最最简单的shell就是这样。