-
#include "apue.h"
-
#include <sys/wait.h>
-
-
static void sig_int(int); /* our signal-catching function */
-
-
int
-
main(void)
-
{
-
char buf[MAXLINE]; /* from apue.h */
-
pid_t pid;
-
int status;
-
-
if (signal(SIGINT, sig_int) == SIG_ERR)
-
err_sys("signal error");
-
-
printf("%% "); /* print prompt (printf requires %% to print %) */
-
while (fgets(buf, MAXLINE, stdin) != NULL) {
-
if (buf[strlen(buf) - 1] == '\n')
-
buf[strlen(buf) - 1] = 0; /* replace newline with null */
-
-
if ((pid = fork()) < 0) {
-
err_sys("fork error");
-
} else if (pid == 0) { /* child */
-
execlp(buf, buf, (char *)0);
-
err_ret("couldn't execute: %s", buf);
-
exit(127);
-
}
-
-
/* parent */
-
if ((pid = waitpid(pid, &status, 0)) < 0)
-
err_sys("waitpid error");
-
printf("%% ");
-
}
-
exit(0);
-
}
-
-
void
-
sig_int(int signo)
-
{
-
printf("interrupt\n%% ");
-
}
signal()
信号函数,用来检测信号的键入,在本程序中用来检测是否有按下中断键,中断信号来了以后会终止进程,即可以停止while的循环,并输出“interrupt”
fork()
产生新的进程,并返回进程号
excelp()
执行命令
waitip()
等待进程,父进程要等子进程结束后再继续,所以需要等待进程
阅读(994) | 评论(0) | 转发(0) |