linux课程设计进程与内容,Linux课程设计进程控制

图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(\ }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 创建进程 CreateProcess() 调用的核心参数是可执行文件运行时的文件名及其命令行。下表详细地列出了每个参数的类型和名称。 CreateProcess() 函数的参数 2. 正在运行的进程 如果一个进程拥有至少一个执行线程,则为正在系统中运行的进程。当调用ExitProcess() API函数,通知系统终止它所拥有的所有正在运行、准备运行或正在挂起的其他线程。当进程正在运行时,可以查看它的许多特性。 首先可利用GetCurrentProcessId() 函数来查看的进程特性是进程标识符 (PID),返回的PID在整个系统中都可使用。其他的可显示当前进程信息的API函数如GetStartupInfo()和GetProcessShutdownParameters() 可给出进程的配置信息。 通常,一个进程需要它的运行期环境的信息。例如API函数GetModuleFileName() 和GetCommandLine() ,可以给出用在CreateProcess() 中的参数以启动应用程序。 用GetGuiResources() 来查看进程的GUI资源。此函数既可返回指定进程中的打开的GUI对象的数目,也可返回指定进程中打开的USER对象的数目。进程的其他性能信息可通过GetProcessIoCounters()、GetProcessPriorityBoost() 、GetProcessTimes()、GetProcessWorkingSetSize() 和GetProcessVersion()得到。 3. 终止进程 所有进程都是以调用ExitProcess() 或者TerminateProcess() 函数结束的。最好用前者而不要用后者,因为进程是在完成了它的所有的关闭任务之后以正常的终止方式来调用前者的。而外部进程通常调用后者即突然终止进程的进行,由于关闭时的途径不太正常,有可能引起错误的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值