C程序模拟调度程序

时间:2015-09-13 20:52:38

标签: c linux exec fork

我正在学习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);
}

1 个答案:

答案 0 :(得分:1)

读取信号。当您从父级启动新进程时,您将要发送信号以终止旧子进程。当有人键入ctrl + c时,您的程序将从操作系统获得信号。您可能还需要捕获从操作系统获得的信号并进行一些清理(例如,杀死旧的子进程)。

请参阅,例如http://linux.die.net/man/2/signal

另外,显然,您需要重写您的程序,以便它永远不会退出,除非它获得该信号。