Posted on 2007-08-04 00:20
ZelluX 阅读(569)
评论(0) 编辑 收藏 所属分类:
C/C++
APUE上的例程,稍微改了下,在进程开始和结束的时候会分别显示当前的PID和退出状态。
不支持参数
1. fgets命令从标准输入读入命令,当键入文件结束字符(通常是Ctrl+D)时进程结束
2. 以\0替换输入命令的最后一个字符,即去掉换行符,使得execlp能够处理
3. fork函数创建一个新进程,对父进程返回新的子进程的非负PID,对子进程返回0
4. 在子进程中,调用execlp以执行从标准输入读入的命令。fork和exec的组合产生了一个新进程
5. 新的子进程开始执行后,父进程等待子进程的终止,这一要求由waitpid实现
6. 执行这个程序后还可以在这个简易shell中创建新的自身的进程
#include <sys/types.h>
#include <sys/wait.h>
#include "ourhdr.h"
int main(void)
{
char buf[MAXLINE];
pid_t pid;
int status;
printf("%% ");
while (fgets(buf, MAXLINE, stdin) != NULL)
{
buf [strlen(buf) - 1] = 0;
if ( (pid = fork()) < 0)
err_sys("fork error");
else if (pid == 0)
{
execlp(buf, buf, (char *) 0);
err_ret("couldn't execute: %s", buf);
exit(127);
}
printf("*** %d ***\n", status);
/* parent */
if ( (pid = waitpid(pid, &status, 0)) < 0)
err_sys("waitpid error");
printf("*** %d ***\n", pid);
printf("%% ");
}
exit(0);
}