• 大小: 846KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: OS实验  

资源简介

实验一:参考以上示例程序中建立并发进程的方法,编写一个多进程并发执行程序。父进程首先创建一个执行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个文件信息

评论

共有 条评论