我正在学习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 :(得分:1)
读取信号。当您从父级启动新进程时,您将要发送信号以终止旧子进程。当有人键入ctrl + c时,您的程序将从操作系统获得信号。您可能还需要捕获从操作系统获得的信号并进行一些清理(例如,杀死旧的子进程)。
请参阅,例如http://linux.die.net/man/2/signal
另外,显然,您需要重写您的程序,以便它永远不会退出,除非它获得该信号。