资源简介
实验一:参考以上示例程序中建立并发进程的方法,编写一个多进程并发执行程序。父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制ps命令总在ls命令之前执行。
代码片段和文件信息
/*
* Filename : pctl.c
* copyright : (C) 2006 by zhanghonglie
* Function : 父子进程的并发执行
*/
#include “pctl.h“
int main(int argc char *argv[])
{
int i;
int pid; //存放子进程号
int status; //存放子进程返回状态
char *args[] = {“/bin/ls““-a“NULL}; //子进程要缺省执行的命令
signal(SIGINT(sighandler_t)sigcat); //注册一个本进程处理键盘中断的函数
pid=fork() ; //建立子进程
if(pid<0) // 建立子进程失败?
{
printf(“Create Process fail!\n“);
exit(EXIT_FAILURE);
}
if(pid == 0) // 子进程执行代码段
{ //报告父子进程进程号
printf(“I am Child process %d\nMy father is %d\n“getpid()getppid());
pause(); //暂停,等待键盘中断信号唤醒
//子进程被键盘中断信号唤醒继续执行
printf(“%d child will Running: \n“getpid()); //
if(argv[1] != NULL){
//如果在命令行上输入了子进程要执行的命令
//则执行输入的命令
for(i=1; argv[i] != NULL; i++) printf(“%s “argv[i]);
printf(“\n“);
//装入并执行新的程序
status = execve(argv[1]&argv[1]NULL);
}
else{
//如果在命令行上没输入子进程要执行的命令
//则执行缺省的命令
for(i=0; args[i] != NULL; i++) printf(“%s “args[i]);
printf(“\n“);
//装入并执行新的程序
status = execve(args[0]argsNULL);
}
}
else //父进程执行代码段
{
printf(“\nI am Parent process %d\n“getpid()); //报告父进程进程号
if(argv[1] != NULL){
//如果在命令行上输入了子进程要执行的命令
//则父进程等待子进程执行结束
printf(“Waiting for child done.\n\n“);
waitpid(pid&status0); //等待子进程结束
printf(“\nMy child exit! status = %d\n\n“status);
}
else{
//如果在命令行上没输入子进程要执行的命令
//唤醒子进程,与子进程并发执行不等待子进程执行结束,
if(kill(pidSIGINT) >= 0)
printf(“%d Wakeup %d child.\n“getpid()pid) ;
printf(“%d don‘t Wait for child done.\n\n“getpid());
}
}
return EXIT_SUCCESS;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-04-13 17:00 test1\
文件 174 2014-04-13 15:20 test1\Makefile
文件 174 2014-04-13 15:11 test1\Makefile~
文件 8931 2014-04-13 16:20 test1\pctl
文件 2139 2014-04-13 16:20 test1\pctl.c
文件 2142 2014-04-13 14:51 test1\pctl.c~
文件 280 2014-04-13 14:53 test1\pctl.h
文件 0 2014-04-13 14:51 test1\pctl.h~
文件 4284 2014-04-13 16:20 test1\pctl.o
目录 0 2014-04-23 22:27 test2\
文件 151 2014-04-23 22:00 test2\Makefile
文件 9163 2014-04-23 22:20 test2\ppipe
文件 2574 2014-04-23 22:20 test2\ppipe.c
文件 4824 2014-04-23 22:20 test2\ppipe.o
目录 0 2014-04-28 19:46 test3\
文件 168 2014-04-27 22:34 test3\Makefile
文件 375242 2014-04-28 19:44 test3\X67F9PVLKR}2WRFP$5OCY58.jpg
文件 9780 2014-04-28 19:40 test3\psched
文件 1975 2014-04-28 19:40 test3\psched.c
文件 5440 2014-04-28 19:40 test3\psched.o
目录 0 2014-05-02 22:33 test4\
文件 379 2014-05-02 21:56 test4\Makefile
文件 0 2014-05-02 21:56 test4\Makefile~
文件 61913 2014-05-02 22:31 test4\QQ图片20140502223119.jpg
文件 24968 2014-05-02 22:32 test4\QQ图片20140502223219.jpg
文件 18417 2014-05-02 22:27 test4\consumer
文件 3573 2014-05-02 21:55 test4\consumer.c
文件 3573 2014-05-02 21:54 test4\consumer.c~
文件 6816 2014-05-02 21:59 test4\consumer.o
文件 4204 2014-05-02 20:38 test4\ipc.c
文件 4204 2014-05-02 20:37 test4\ipc.c~
............此处省略38个文件信息
- 上一篇:IOCP 客户端和服务端
- 下一篇:模拟段式存储管理的分配与回收操作系统课程设计
评论
共有 条评论