操作系统--进程控制实验

#include "pctl.h" 
int main(int argc, char *argv[])
{
  int m=2;
  int i;
  int seconds=3;
  int pid1; 
  int pid2; //存放子进程号 
  int status1;
  int status2; //存放子进程返回状态 
  char *args1[] = {"/bin/ls","-all",NULL}; //子进程1要缺省执行的命令
  char *args2[] = {"/bin/ps","-l",NULL}; //子进程2要缺省执行的命令
  signal(SIGINT,(sighandler_t)sigcat); //注册一个本进程处理键盘中断的函数
  
 while(m!=0)
{
  pid1=fork() ; //建立子1进程 
  if(pid1<0) // 建立子进程1失败? 
  { 
      printf("Create Process1 fail!\n"); 
      exit(EXIT_FAILURE); 
  }
  if(pid1 == 0) // 子进程1执行代码段 
  { 
    
    //报告父子进程进程号 
    printf("I am Child process1 %d\nMy father is %d\n",getpid(),getppid()); 
    m=0;
    pause(); //暂停,等待键盘中断信号唤醒
    //子进程被键盘中断信号唤醒继续执行 
   
    printf("%d child will Running: \n",getpid()); // 
    
    for(i=0; args1[i] != NULL; i++) printf("%s ",args1[i]); 
     printf("\n"); 
     //装入并执行新的程序 
    status1 = execve(args1[0],args1,NULL); 
     
    
   }
  else //父进程执行代码段 
   { 
    printf("\nI am Parent process %d\n",getpid()); //报告父进程进程号 
    pid2=fork();//建立子进程2
    if(pid2<0) // 建立子进程2失败? 
    { 
      printf("Create Process2 fail!\n"); 
      exit(EXIT_FAILURE); 
    }
    if(pid2 == 0) // 子进程2执行代码段 
  { //报告父子进程进程号 
    m=0;
    printf("I am Child process2 %d\nMy father is %d\n",getpid(),getppid()); 
    for(i=0; args2[i] != NULL; i++) printf("%s ",args2[i]);
    printf("\n");
    //子进程2开始执行
    status2=execve(args2[0],args2,NULL);
  }
    else
  {
     sleep(1);
     if(kill(pid1,SIGINT)>=0)
       printf("%d wakeup %d child.\n",getpid(),pid1);
     printf("But %d don't Wait for %d child done.\n\n",getpid(),pid1); 
  }
 } 
   unsigned sleep(seconds);
 
}  
}   

Pctl.h文件

#include <sys/types.h> 
#include <wait.h> 
#include <unistd.h> 
#include <signal.h> 
#include <stdio.h> 
#include <stdlib.h> 
//进程自定义的键盘中断信号处理函数 
typedef void (*sighandler_t) (int); 
void sigcat(){ 
    printf("%d Process continue\n",getpid()); 
}
Makefile文件

head = pctl.h 

srcs = pctl.c 

objs = pctl.o 

opts = -g -c 

all: pctl

pctl: $(objs) 

gcc $(objs) -o pctl 

pctl.o: $(srcs) $(head) 

gcc $(opts) $(srcs) 

clean: 




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.基本系统进程   Csrss.exe:这是子系统服务器进程,负责控制Windows创建或删除线程以及16位的虚拟DOS环境。   System Idle Process:这个进程是作为单线程运行在每个处理器上,并在系统不处理其它线程的时候分派处理器的时间。   Smss.exe:这是一个会话管理子系统,负责启动用户会话。   Services.exe:系统服务的管理工具。   Lsass.exe:本地的安全授权服务。   Explorer.exe:资源管理器。   Spoolsv.exe:管理缓冲区中的打印和传真作业。   Svchost.exe:这个进程要着重说明一下,有不少朋友都有这种错觉:若是在“任务管理器”中看到多个Svchost.exe在运行,就觉得是有病毒了。其实并不一定,系统启动的时候,Svchost.exe将检查注册表中的位置来创建需要加载的服务列表,如果多个Svchost.exe同时运行,则表明当前有多组服务处于活动状态;多个DLL文件正在调用它。   至于其它一些附加进程,大多为系统服务,是可以酌情结束运行的。由于其数量众多,我们在此也不便于一一列举。   在系统资源紧张的情况下,我们可以选择结束一些附加进程,以增加资源,起到优化系统的作用。在排除基本系统及附加进程后,新增的陌生进程就值得被大家怀疑了。 更多内容请看Windows操作系统安装、系统优化大全、系统安全设置专题,或进入讨论组讨论。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值