Linux课程设计进程控制 联系客服

发布时间 : 星期六 文章Linux课程设计进程控制更新完毕开始阅读1d3fd0c5fad6195f302ba6a6

图2 进程控制系统调用-fork_wait

2.1.3

Mini Shell编程(此部分操作截图见图4、5)

1. 在exp2目录编写一个简单的shell程序—Mini Shell,它接收输入的命令并解释执行。

? Linux的命令分为内部命令和外部命令两种。内部命令由Shell程序自己实现,如cd、

pwd等,外部命令是位于磁盘上(多数在/bin和/usr/bin目录下)的可执行程序。Mini Shell只实现两个内部命令:pwd和quit(退出),它可执行所有不带选项和参数的外部命令,如date、who、cal、ls等。

2. (选做1)修改Mini Shell程序,使它可执行只带一个命令选项或参数的命令行,如ls -a、

cat file、echo hello等。

? 用strtok函数将读入的命令行cmd以空格为分隔符拆为两个字符串cmd1和cmd2: cmd1=strtok(cmd,\ cmd2=strtok(NULL,\

此时的cmd1即为命令名,cmd2即为命令的选项或参数。判断cmd2,若为空则执行系统调用execlp(cmd1, cmd1, NULL),否则执行execlp(cmd1, cmd1, cmd2, NULL)

3. (选做2)修改Mini Shell程序,可做任何你认为可以改进的修改,如界面、提示、处理输

入错误、增强功能等。

图4 Mini Shell编程-1

图5 Mini Shell-2

图6 Mini Shell-3

3. 实验结论与评价

3.1 进程控制命令

此部分操作较为简单,主要在帮助理解进程的概念和进程的PID,掌握基本的进程操作如ps kill和后台运行一个程序等。通过这一部分的操作我了解到进程是什么,进程和程序有什么不一样,子进程和父进程之间的关系。

3.2 进程控制系统调用

fork_wait是本次实验的第一个编程题,通过已经给好的代码我了解到了几个在Linux中常用的函数,如sleep(), getpid(), fork(), wait() 等,我更加清晰地在修改程序的过程中理解了子进程和父进程的关系,更重要的是我学会了通过简单函数来对进程进行控制。观察到了特殊的僵尸进程:僵尸进程(zombie)是指已终止运行,但尚未被清除的进程。

exec_test是本次试验的第二个编程题,这次学习到的函数是execl(),第一参数path字符指针所指向要执行的文件路径, 接下来的参数代表执行该文件时传递的参数列表:argv[0],argv[1]... 最后一个参数用空指针NULL作结束。利用这个函数实现了用exec()置换程序的执行代码文件的功能。

3.3 Mini Shell编程

这一部分的操作较为复杂,占用了实验的大部分时间。让我意识到我们的编程能力还有待提高,尤其是字符串、文件等部分。选作一的地方通过空格把命令名和参数分开分别执行,需要分清是应该先读命令再分开还是先分开再读命令,选作二我增添了几个Mini Shell内部命令,修改了界面。

4. 程序清单

4.1 fork_wait.c

#include #include #include main() {

int rid, cid;

printf(\2012010948****\\n\ //将your-sid改为你的学号 rid = fork();

if ( rid < 0 ) printf(\ else if ( rid == 0 ) { // 子进程

printf(\ sleep(10); // 睡眠10秒 printf(\ }

else { // 父进程

//sleep(30); //睡眠30秒 cid=wait(NULL);

printf(\ } exit(0); } }

4.2 exec_test.c

#include #include #include main() { int rid;

printf(\2012010948****\\n\ //将your-sid改为你的学号 rid = fork();

if ( rid < 0 ) printf(\ else if ( rid == 0 ) { // 子进程

printf(\ execl(\ }