Shell命令在是最常用的一个和操作系统交互的工具。
shell命令的基本执行过程是:
1)从stdin来读取用户的command。
2)对command进行解析,并判断是否为buildin command
3)如果是buildin command则执行buildin command
4)如果非buildin command,则执行fork命令,然后在fork的子进程中执行execve创建新的program。
其中还涉及到对输入command进行parse的简单过程。
5)如果要对进程的切换fg, bg等。需要涉及到signal切换等。(暂时不支持)
一下是一个最简单的shell, 依赖书籍csapp.c 以及 csapp.h
/* Simple Shell command
* linux>gcc -o shellex shellex.c csapp.c -lpthread
*/#include "csapp.h"
#define MAXARGS 128/*Function prototypes */
void eval(char *cmdline);
int parseline(char * buf, char **argv);
int builtin_command(char **argv);int main()
{char cmdline[MAXLINE]; /* Command line */while(1) {/* Read */printf("> ");Fgets(cmdline, MAXLINE, stdin);if(feof(stdin))exit(0);