2015-09-13 44 views
-3

我正在学习C并尝试执行以下程序。模拟调度程序的C程序

在过去,我使用fork()和exec(),但对于相当简单的应用程序。

然而,该方案应做到以下几点:
1.程序必须使用fork()和exec()
2.必须调用几个节目,一次一个
3.必须杀死以前的程序,只在一个时间上运行的一个程序
4.方案必须运行直到ctrl-c执行

上一页例如fork() & exec()代码。我如何修改下面的代码来实现上述步骤?

#include <stdlib.h> 
#include <unistd.h> 
#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    void runit(void); 
    int pid; /* process ID */ 

    switch (pid = fork()) 
    { 
     case 0:  /* a fork returns 0 to the child */ 
      runit(); 
      break; 

     default: /* a fork returns a pid to the parent */ 
      sleep(5); /* sleep for 5 seconds */ 
      printf("I'm still here!\n"); 
      break; 

     case -1: /* something went wrong */ 
      perror("fork"); 
      exit(1); 
    } 
    exit(0); 
} 

void runit(void) 
{ 
    printf("About to run ls\n"); 
    execlp("ls", "ls", "-af", "/", (char*)0); 
    perror("execlp"); /* if we get here, execlp failed */ 
    exit(1); 
} 
+0

我们不是来为你做这项工作的。请阅读每个功能的手册页,考虑它们如何适用于您的任务要求,并给它一个红热的去。如果您仍然有困难,请回复更具体的问题。 – kaylum

+0

@AlanAu我不是要你为我工作。我只需要从我以前的代码开始。 – user3337714

+0

那么对你的问题更具体一些。你基本上没有多少努力就舍弃了作业题目。这是你的工作,要问一个不是我们的具体问题,以确切地猜出你需要帮助什么。 – kaylum

回答

1

阅读信号。当您从父母启动新子进程时,您将要发送一个信号来杀死旧子进程。当某人键入ctrl + c时,您的程序将从操作系统获得信号。您可能还需要捕获从O/S获得的信号并进行一些清理(例如,杀死旧的子进程)。

见,例如,http://linux.die.net/man/2/signal

而且,很明显,你需要重写你的程式,它永远不会离开,除非它获取信号。